我正在尝试将图像保存到我的 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
但没有快乐 - 仍然是同样的问题。
设置对storage
和public
文件夹以及这些文件夹中的所有文件夹的写入权限。右键单击文件夹,转到Properties
并更改文件夹权限。
http://m.wikihow.com/Change-File-Permissions-on-Windows-7
编辑:这仅适用于 Linux。我保留这个答案,以防有人在 Linux 机器上遇到同样的问题。
试试这个:
php artisan cache:clear
sudo chmod -R 777 app/storage
composer dump-autoload
除了使用文件写入,您还可以使用 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;
}