【问题标题】:can't write image data to path in laravel using the Intervention library无法使用干预库将图像数据写入 laravel 中的路径
【发布时间】:2014-10-19 07:10:47
【问题描述】:

我正在使用 Laravel 4.2 和 Intervention 库,我不确定为什么在其他一切似乎都正确的情况下会遇到这个问题。这是代码:

Route::post('test',function()
{
    // check if files was sent
    if(Input::hasFile('file'))
    {
        $image = Input::file('file');
        $filename = date('Y-m-d-H:i:s').'-'.$image->getClientOriginalName();
        $path = public_path('images/cars/'.$filename);
        Image::make($image->getRealPath())->resize(468,249)->save($path);

    } else {
        return Response::json(array('test'=>false));
    }
});

我收到的错误是:

Intervention\Image\Exception\NotWritableException 无法将图像数据写入路径(C:\xampp\htdocs\jacars_project\public/images/cars/2014-08-26-03:41:39-icon_2034.png) .

在此先感谢您帮助我解决问题

【问题讨论】:

  • 你在那里写的代码很好。此错误似乎是目录的问题。该代码无法找到该目录。您可以通过使用相对路径专门指向该目录来解决该问题,例如在我的情况下,我使用了路径 public/baz.jpeg 并得到与您相同的错误。我将路径更改为 ../public/baz.jpeg,现在图像按预期存储在那里。

标签: php laravel


【解决方案1】:

您可以检查目录是否存在,如果没有这样的目录,则创建它:

        if (!file_exists($save_path)) {
            mkdir($save_path, 666, true);
        }

【讨论】:

  • 一开始我无法理解这个问题,但它解决了我将图像上传到公共图像路径的问题。谢谢!
  • 权限不应该是775而不是666吗?
【解决方案2】:

只要改变这个:

$path = public_path('images/cars/'.$filename);

到这里:

$path = 'images/cars/' . $filename;

另外,请确保目标path/location 是可写的,具有写权限。

【讨论】:

  • 如何确保路径/位置可写且具有写权限?
  • 你的项目在什么OS上运行?
  • Windows 8 我正在运行
  • 要确保该文件夹是可写的,请使用以下命令:sudo chmod 775 your_directory for linux
【解决方案3】:

通过首先创建我将放置图像文件的目录为我解决了问题。

例如:首先创建public/images/cars/ 目录。然后您现在可以将图像保存在那里。

PS:但是如果你想动态创建文件夹,我不知道该怎么做。

【讨论】:

    【解决方案4】:

    经过这么多小时,我找到了 Centos 8 的解决方案(但它也适用于其他人)。 我们需要为将保存要上传的图像的文件夹分配必要的权限。而且使用“chmod”命令是不够的,还需要使用

    httpd_sys_content_t

    httpd_sys_rw_content_t

    例如:我们从命令行进入我们的 Laravel 项目的文件夹,我们进入 "/public" 文件夹并执行以下命令给"/images" 文件夹:

    chown –R apache: images
    chmod –R 755 images
    systemctl restart httpd
    chcon -R -t httpd_sys_content_t images
    chcon -R -t httpd_sys_rw_content_t images
    systemctl restart httpd
    

    注意:(“chown -R apache: images”在其他 Linux 版本中替换其等效的“chown -R www-data:images”)。

    【讨论】:

    • 欢迎来到stackoverflow,本站只接受英文回答。
    【解决方案5】:

    如果你使用的是 Ubuntu -> sudo chmod -R 777 public

    【讨论】:

      【解决方案6】:

      在我的情况下,它没有文件夹的权限, 带有 755 的 chmod 完成了这项工作。

      chmod -R 755
      

      【讨论】:

      • 请详细说明如何实现这一点的答案。可能会展示如何更改 OP 的代码以实现您建议的更改。
      【解决方案7】:

      如果您尚未创建路径的文件夹,您将收到该错误。你需要先创建它。

      【讨论】:

        【解决方案8】:

        如果您在共享主机上,请勿使用 public_path() 辅助函数指向上传位置。只需输入位置,您就可以开始了:

        改变 public_path(UPLOAD_PATH)

        只 UPLOAD_PATH

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-31
          • 2016-01-15
          • 2017-01-25
          • 1970-01-01
          • 1970-01-01
          • 2019-02-25
          • 2015-09-23
          • 2020-03-29
          相关资源
          最近更新 更多