Php Laravel 5.3 Storage::put使用文件名创建一个目录
我正在使用Laravel的文件存储功能保存文件:Php Laravel 5.3 Storage::put使用文件名创建一个目录,php,laravel,laravel-5,laravel-5.3,laravel-filesystem,Php,Laravel,Laravel 5,Laravel 5.3,Laravel Filesystem,我正在使用Laravel的文件存储功能保存文件: public function dataPost(Request $request) { $fileInForm = 'doc'; if ($request->hasFile($fileInForm)) { $file = $request->file($fileInForm); if ($file->isValid()) { // Filename
public function dataPost(Request $request) {
$fileInForm = 'doc';
if ($request->hasFile($fileInForm)) {
$file = $request->file($fileInForm);
if ($file->isValid()) {
// Filename is hashed filename + part of timestamp
$hashedName = hash_file('md5', $file->path());
$timestamp = microtime() * 1000000;
$newFilename = $hashedName . $timestamp . '.' . $file->getClientOriginalExtension();
Storage::disk('local')->put($newFilename, $file);
}
}
}
这会保存文件,但会保存在与文件名相同的目录中,例如:
storage/app/952d6c009.jpg/952d6c009.jpg
或
storage/app/234.jpg/234234.jpg
这是预期的吗?有没有办法只存储文件而不为每个文件指定单独的目录
谢谢 发生这种情况是因为您指定了要存储为文件名的目录。
newFilename
,应该是目录名,如“images”。参考这一行
Storage::disk('local')->put($newFilename, $file);
所以你可以把这个改成
Storage::disk('local')->putFile('images', $file);
然后,您将获得存储在
storage/app/images/234234.jpg
的路径。您需要在第二个参数中提供文件内容,而不是文件对象,请尝试以下操作:
Storage::disk('local')->put($newFilename,file_get_contents($file))代码>$文件已编码。您必须取消对该文件的编码
存储::磁盘('local')->put($newFilename,File::get($File)) 在这种情况下,文件在什么时候获得新的文件名?我是否应该编辑$file
对象以更新文件名?类似于$file->originalName=$newFilename代码>?您可以这样做,也可以使用@ABDEL RHMANThank you获取此代码段,这可能会提供一些有限的即时帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。
Storage::disk('local')->putFileAs('', $file, $filenewname);