首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储在s3中的文件路径与提供的路径不匹配-使用Laravel

存储在s3中的文件路径与提供的路径不匹配-使用Laravel
EN

Stack Overflow用户
提问于 2020-04-10 05:57:43
回答 1查看 67关注 0票数 0

我正在构建一个服务来上传图像与laravel和存储在亚马逊网络服务s3存储桶,这是负责存储图像的函数。

代码语言:javascript
运行
复制
public function fromUrl(Request $request)
{
  $validator = Validator::make($request->all(), [
    'files'   => 'required|array|min:1',
    'files.*' => 'string',
  ]);

  if (!$validator->fails()) {
    $paths = [];
    foreach ($validator->validate()['files'] as $file) {
      $url = config('services.s3.host') . Storage::disk('s3')->put('images/public', file_get_contents($file), 'public');
      array_push($paths, $url);
    }
    return $paths;
  } else {
    throw new ValidateException([
      'message' => $validator->errors()->toArray(),
      'rules' => $validator->failed()
    ]);
  }
}

请求正文如下所示。

代码语言:javascript
运行
复制
{
  "files": [
    "https://image-url-1",
    "https://image-url-2"
  ]
}

我希望保存图像时返回的路径是这样的。

代码语言:javascript
运行
复制
[
  "https://my-bucket-url/images/public/random-name-for-image1",
  "https://my-bucket-url/images/public/random-name-for-image2"
]

但是相反,我得到了以下结论。

代码语言:javascript
运行
复制
[
  "https://my-bucket-url/1",
  "https://my-bucket-url/1"
]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-10 06:34:45

您在示例中滥用了put。

首先,第一个参数是path加上filename,您没有文件名随机逻辑。第三个参数是选项数组。

代码语言:javascript
运行
复制
$randomFileName = uniqid(rand(), true);

$path = 'images/public/' . $randomFileName;

Storage::disk('s3')->put($path, file_get_contents($file));

这段代码将在images/public/$randomFileName中保存一个元素。要返回正确的路径,可以使用url()方法。

代码语言:javascript
运行
复制
$url = Storage::disk('s3')->url($path);

 array_push($paths, $url);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61130870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档