我想把我所有的上传文件移到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()
)。