s3正在向上传的文件名添加随机字符串



我想把我所有的上传文件移到s3,我有两种类型的文件

1 -我的本地服务器上已经存在的文件

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

2 -新文件正在上传

$fileName = $request->file('attachment')->getClientOriginalName();
$res = Storage::disk('s3')->put($fileName, $request->attachment);

所以第一组没有问题,文件被上传到s3以给定的名称

但对于第二组,s3会在文件名中添加一些随机字符串比如上传文件时,文件名为

v26-how-to-list-users-in-linux.png

得到

v26-how-to-list-users-in-linux.png/M53gpy5KvIglCMOBXOnx3KaqghaJ4DQGXzLIkLyA.png

在s3上,由于某种原因,它将/M53gpy5KvIglCMOBXOnx3KaqghaJ4DQGXzLIkLyA.png添加到文件名的末尾

这里是另一个示例,该文件以给定名称

上传v26-testing.txt

on the s3我得到

v26-testing.txt/c36EPgaDMgPb8RKHIyyZCPaxWMJR0g1yV10JVGQF.txt

它只对直接上传发生,例如:

$res = Storage::disk('s3')->put($fileName, $request->attachment);

当我将现有文件从本地存储移动到s3时,它不会在文件名

中添加任何额外的字符

您正在使用的put方法期望文件内容作为第二个参数:

public function put($path, $contents, $options = [])

您在第一种情况下传递Storage::get($file->path)的内容,但在第二种情况下,您似乎传递了File/UploadedFile对象,导致put调用putFile函数:

return $this->putFile($path, $contents, $options);

然后调用putFileAs函数,您的名字作为第一个$path参数和$file->hashName作为第三个$name参数:

return $this->putFileAs($path, $file, $file->hashName(), $options);

最后这个函数赋值了你看到的文件名:

$path = trim($path.'/'.$name, '/'), $stream, $options

修复修复它的一种方法是更改$request->attachment以返回文件内容。将其更改为$request->attachment->get()应该工作,如果这是标准请求UploadedFile对象(通常你会使用$request->file('attachment')->get())。

最新更新