将图像存储到公用文件夹Laravel 5.1

时间:2016-03-16 10:28:35

标签: php laravel laravel-5.1

我试图将图像保存到我的laravel应用程序中的文件夹中。

我收到错误:

  

fopen(F:\ blog \ public / usr-data / photos):无法打开流:权限被拒绝

这是我的laravel控制器,正在写入此文件夹。

$error          = false;
$absolutedir    = public_path();
$dir            = '/usr-data/photos';
$serverdir      = $absolutedir.$dir;
$filename       = array();

foreach($_FILES as $name => $value) {
    $json           = json_decode($_POST[$name.'_values']);
    $tmp            = explode(',',$json->data);
    $imgdata        = base64_decode($tmp[1]);

    $fileAry = explode('.',$json->name);
    $extension = strtolower(end( $fileAry ));

    $fname          = $card->id.'.'.$extension;

    $handle         = fopen($serverdir,'w');
    fwrite($handle, $imgdata);
    fclose($handle);

    $filename[]     = $fname;
}

我尝试过使用

  

Icacls" F:\ blog \ public / usr-data / photos" / grant everyone:(OI)(CI)F

但没有快乐 - 仍然是同样的问题。

3 个答案:

答案 0 :(得分:0)

编辑:这仅适用于Linux。如果有人在Linux机器上遇到同样的问题,我会保留这个答案。

试试这个:

 php artisan cache:clear 

 sudo chmod -R 777 app/storage 

 composer dump-autoload

答案 1 :(得分:0)

您需要在storagepublic文件夹上设置写入权限,然后在这些文件夹中设置所有文件夹。使用右键单击文件夹,转到Properties并更改文件夹权限。

inversion of control

答案 2 :(得分:0)

您也可以使用Laravel文件系统存储类,而不是使用文件写入。请尝试使用以下给出的示例。

$image represents the encoded image.
$Id represents the id of the user.


public function imageUpload($image, $Id)
   {
       //Decode base64 string to image
       $profile_image = 'image/jpeg;base64,' . $image;
       $new_data = explode(";", $image);
       $data = explode(",", $new_data[1]);
       $file = base64_decode($data[1]);
       $imageFileName = $Id . '.jpeg';
       $image_path = '/storage/' . $imageFileName;
       Storage::put($imageFileName, $file);
       return $image_path;
   }