如何读取 Google 云存储上的私人文件

How to Read Private Files on Google Cloud Storage

我想创建一个媒体存储应用程序,允许用户在我的平台上上传和查看他们的媒体。 我使用 laravel 来创建它。 我成功上传到google云存储私有文件属性,并将文件名保存到我的数据库。

我的问题是,如何直接从 laravel 访问它,并将其显示为图像或视频,目前我有 cide.json 文件作为密钥,但我从来没有得到详细的解释使用它。

好吧,如果我想象你的 table 结构,它可能像

id   user_id   file_location

你可以建立一个api喜欢

Route::get('users/{id}/files', FolderName\ControllerName@ControllerFunction)

现在您可以通过传递 id 来获取您的用户媒体文件,或者您可以根据您的想法修改您的控制器以获取所有用户媒体文件。

简要说明:

在您的 laravel 项目的 Routes.php 文件中添加此路由

Route::get('users/{id}/files', User\UserApiController@fetchUserMediaFiles);

创建一个新的控制器来管理流向服务函数的请求

class UserApiController {

   public $userService;

   public function __construct(UserService $userService) {

        $this->userService = $userService;

   }

   public function fetchUserMediaFiles($id) {
     
         $userMediaFiles = $this->userService->fetchUserMediaFiles($id);

         return $this->done(null, [
             'userMediafiles' => $userMediaFiles
         ]); 

   }

}

创建一个新服务来处理来自 Controller 的传入请求并将其发送到存储库

class UserService {

   private $userRepository;

   public function __construct(UserRepository $userRepository) {

       $this->userRepository= $userRepository;

   }

   public function fetchUserMediaFiles($id) {
    
      return $this->userRepository->fetchUserMediaFiles($id);

   }
}

创建新的存储库,它将接受来自 userService 的请求 class 并且 returns 通过从您的数据库中获取数据

class UserRepository {

public function fetchUserMediaFiles($id) {

    $userMediaFilesTable = UserMediaFiles::$TABLE_NAME;

    $model  = UserMediaFiles::with([])
                ->where("$userMediaFilesTable.user_id", $id);
    
    $model = $model->select(["$userMediaFilesTable.user_id", "$userMediaFilesTable.file_location"])
                    ->get();

    return $model;

    }
}

现在让我们尝试使用虚拟获取请求api

http://xxxxxxxx/api/users/1/files

你的回复会像

{
"userMediafiles": [
    {
        "user_id": 1,
        "file_location": "https://xxxxx.com/file",
    }
   
]

}

这就是您在 laravel 中的做法。希望这个解释能有所帮助。