【问题标题】:Error uploading a file in Laravel在 Laravel 中上传文件时出错
【发布时间】:2015-04-11 16:52:23
【问题描述】:

我正在尝试在我的Laravel 应用程序中上传一张图片。 localhost 一切正常。我已经测试过很多次了。

所以,我已将所有文件上传到服务器并再次测试。现在当我上传图片时,我收到以下错误:

{"error":{"type":"Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException","message":"","file":"/var/www/html/vendor/laravel/framework/ src/Illuminate/Routing/RouteCollection.php","line":210}}`

不知道这有什么问题。在 locahost 中一切正常。我在我的服务器中使用Ubuntu 14.02GD 库已安装并激活。 Composer 更新已运行并已安装所有软件包。

可能是什么问题?如果您需要任何代码 sn-ps,请告诉我。提前致谢。

【问题讨论】:

  • 运行 php artisan routes(或 Laravel 5 的 php artisan route:list)并查看您要上传到的路线是否存在且正确。
  • 在 URL 的尾部有一个额外的/。会不会有什么问题?
  • 我最后更改了/,它删除了301 permanently moved 错误。现在它显示以下错误:{"error":{"type":"ErrorException","message":"copy(\/var\/www\/html\/public\/\/upload\/20150413032940.jpeg): failed to open stream: Permission denied","file":"\/var\/www\/html\/app\/controllers\/NominationController.php","line":88}}
  • 这更有意义。似乎您没有网络服务器使用的用户的写入权限
  • 这取决于... 您可以使用chown user:group /path/to/directory 更改目录的所有权。或使用chmod 775 /path/to/directory 使其对所有者组中的所有用户都可写。

标签: php laravel


【解决方案1】:

显然这是一个文件权限问题。

运行 php artisan routes(或 Laravel 5 的 php artisan route:list)帮助解决了另一个问题,因此出现了真正的错误消息:

{"error":{"type":"ErrorException","message":"copy(/var/www/html/public//u‌​pload/20150413032940.jpeg):打开流失败:权限被拒绝","file":"/var/www/html/app/controllers/NominationController.php","l‌​ine":88}}

这意味着网络服务器的用户不能写信给public/upload。这可以通过两种方法解决(选择取决于偏好和设置)

  1. chown user:group /path/to/directory 更改目录的所有权
  2. chmod 775 /path/to/directory 使目录对所有者组中的所有用户都可写

【讨论】:

  • 还要添加一件事:如果路径中未定义 Ajax 调用,请删除任何尾随斜杠 /。我在调用 ajax 时遇到了问题:example.com/upload/image/ 我将其更改为 example.com/upload/image 并且它起作用了。否则,您将收到 301 permanently moved 错误消息。
【解决方案2】:

确保提交表单时调用的路由可以通过表单的提交方法访问(例如,如果方法属性为“GET”,则为 GET)

例如,

Route::get('/upload', ...)

<form action="/upload" method="post">...</form>

在你看来会导致你得到的错误。

【讨论】:

  • 我正在通过 Ajax 上传。其他一些 ajax 方法运行良好。只有图片上传不起作用
  • 您能发布您的路线定义和上传脚本的基本版本吗?你确定你的路由的 URL 不匹配另一个只接受错误 HTTP 方法的 URL 吗?
  • 我不明白,本地主机中的一切都运行良好。那么服务器可能有什么问题?
  • 老实说我不知道​​,但也许发布一些代码 sn-ps 可以帮助我(或其他人)弄清楚一些事情......不过很奇怪。
【解决方案3】:

我刚遇到这个问题,在检查权限等后它仍然存在...我只是尝试从我在 .env 文件中设置的路径中删除 LEADING 斜杠并且它有效(即使它是相对于网络服务器的公共目录因此理论上应该使用前导斜杠表示从网络服务器根目录开始)

IMAGE_LIB_PATH="blah/blahblah/"

无论如何,希望这对某人有所帮助。

【讨论】:

    猜你喜欢
    • 2018-05-18
    • 2018-02-13
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 2018-01-14
    相关资源
    最近更新 更多