php Laravel文件异常“无法移动文件”

yc0p9oo0  于 2022-11-28  发布在  PHP
关注(0)|答案(4)|浏览(174)

所以我正在开发一个基本的文件上传系统,大部分看起来都能正常工作。大多数文件都能顺利上传,但由于某种原因,其他文件就不行了,我得到了以下错误:

这不是一个权限错误,因为它确实工作的一些文件-我不相信这是一个文件大小或文件类型的问题。
我的上传方法如下:

$file = Input::file('photo');

$destinationPath    = 'user_img/';
$extension          = $file->getClientOriginalExtension();
$rand               = str_random(12);
$filename           = 'usr_'.  Auth::user()->id . '_str=' . $rand . '_file='. Crypt::encrypt($file->getClientOriginalName()) .'.'. $extension;
$upload_success     = $file->move($destinationPath, $filename);

我在Web上找不到任何解决方案,也不知道它为什么会抛出这个异常。有什么想法吗?

55ooxyrt

55ooxyrt1#

我不想在屏幕截图中计算文件名中的所有字符,但您的文件名可能存在长度问题。Wikipedia文件名-长度限制

ecfsfe2w

ecfsfe2w2#

在我的情况下,这是一个问题:在文件名中使用保留字符。
这是我如何得到的文件名:

$photo_name = "User_".md5($user->id).'_'.date('Y-m-d H:i:s').".$ext";

这意味着最终的文件名将包含-:_等字符。在阅读维基百科文章www.example.com时https://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words,我意识到:(冒号)是一个保留字符,一旦我将其删除(通过将时间戳部分修改为date('Ymd_His')),错误就消失了,上传成功。

polkgigr

polkgigr3#

啊该死的,它似乎是因为我的文件长度超过255个字符,因此文件系统是不喜欢它。我已经改变了从加密到MD5和问题现在得到解决。

js81xvg6

js81xvg64#

类似的事情发生在我身上,当时的情况是这样的:通过视图,我正在通过输入加载一个文件。当我试图将文件保存到文件夹时,我得到了这个错误。我使用laravel 9和livewire。最后我不得不使用liveware提供的方法:

$filename = time() . $this->documento->getClientOriginalName();
$this->documento->storeAs('documents', $filename, 'public');

富恩特斯:https://laravel-livewire.com/docs/2.x/file-uploads

相关问题