如何读取 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 中的做法。希望这个解释能有所帮助。
我想创建一个媒体存储应用程序,允许用户在我的平台上上传和查看他们的媒体。 我使用 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 中的做法。希望这个解释能有所帮助。