我试图将图像保存到我的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
但没有快乐 - 仍然是同样的问题。
答案 0 :(得分:0)
编辑:这仅适用于Linux。如果有人在Linux机器上遇到同样的问题,我会保留这个答案。
试试这个:
php artisan cache:clear
sudo chmod -R 777 app/storage
composer dump-autoload
答案 1 :(得分:0)
您需要在storage
和public
文件夹上设置写入权限,然后在这些文件夹中设置所有文件夹。使用右键单击文件夹,转到Properties
并更改文件夹权限。
答案 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;
}