我正在尝试上传带有帖子请求的图片并将其移至目录。我试过..
$file = $request->file('file');
$extension = strtolower($file->getClientOriginalExtension());
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$generatedName = sha1(time().time());
$directory = '../public/uploads/imgs/'; // works
$fileName = $generatedName . "." . $extension; // works
// 1
$file->move($directory, $fileName);
// 2
$file->move(base_path().$directory, $fileName);
此时,我收到错误:
1无法写入“../public/uploads/imgs”目录
2无法写入“var / www / laravel / public / uploads / imgs”目录
我认为这是由权限引起的,但也没有帮助..我试过
sudo chmod 770 /var/www/laravel/public/uploads (also /imgs/
and
sudo chmod -R 775 /var/www/laravel/public/uploads
我还发现了其他的东西要尝试,但无法弄清楚要在用户名中写什么:
sudo chown username:www-data /var/www/laravel/public/uploads/
我在数字海洋上使用NGINX
答案 0 :(得分:3)
从错误消息开始:
<强> 1。无法写入“../public/uploads/imgs”目录
默认情况下,您的nginx指向laravel安装的public
文件夹。因此../public/uploads/imgs
将解析为/var/www/laravel/public/uploads/imgs
,如果它对laravel
文件夹没有读取权限,则无法使用public
。
通常,nginx应该只对您的/var/www/laravel/public/var/www/laravel/public/uploads/imgs
文件夹具有读取权限。
<强> 2。无法写入“var / www / laravel / public / uploads / imgs”目录
路径是相对路径。它的绝对路径是$directory = '../public/uploads/imgs/';
$file->move(base_path().$directory, $fileName);
,默认情况下不存在。
解决方案:
替换这些行:
$directory = 'uploads/imgs/';
$file->move(public_path().$directory, $fileName);
使用:
public
文档:https://laravel.com/docs/5.1/helpers#paths
警告:不要对您的index.php
文件夹授予nginx写入权限!如果有人设法上传&amp;覆盖您的var answer = prompt("Who is your favorite Star Wars Character?", "Enter something, Rebel Scum.");
switch (answer.toLowerCase())
{
case "jar jar":
case "jar jar binks":
alert("hello");
break;
}
,您的网站将遭到入侵。
答案 1 :(得分:2)
尝试运行此命令以授予upload
目录及其所有子目录的写权限:
sudo chmod -R 775 /var/www/laravel/public/uploads
答案 2 :(得分:2)
我用数字海洋的具体案例解决了我的问题。首先我试过......
useradd -U -G www-data -m -c "deploy" deploybot
chown deploybot:www-data /var/www/laravel
chmod 2755 /var/www/laravel
然后..
sudo usermod -aG www-data deploybot
sudo chown -R www-data:www-data /var/www/laravel
sudo chown -R www-data:www-data /var/www/laravel/public/uploads
sudo chmod -R 775 /var/www
答案 3 :(得分:1)
请在没有特定权限的情况下使用适当的权限创建目标路径imgs。请检查以下代码,您可以在其中授予imgs文件夹的权限。
$destinationPath = public_path().'/uploads/imgs/';
// Create folders if they don't exist
if (!file_exists($destinationPath)) {
File::makeDirectory($destinationPath, $mode = 0755, true, true);
}
makeDirectory params将在here澄清。
仅供参考,$ mode将是0775,0777(认为它不应该给它)。
答案 4 :(得分:0)
首先尝试使用以下命令创建目录:
$directory_path = "...";//whatever you wish it to be
//if the directory doesn't exist already, it is created:
if (!file_exists($directory_path))
{
mkdir($directory_path);
}
首先不要包含其他代码,只是为了看看你是否能够真正创建一个目录。如果它可以正常工作,请尝试在那里包含文件。如果这对您有用,请告诉我!
答案 5 :(得分:0)
sudo usermod -aG www-data deploybot \
sudo chown -R www-data:www-data / var / www / laravel
sudo chown -R www-data:www-data / var / www / laravel / public / uploads
sudo chmod -R 775 / var / www
它对我有用 确保相应地更改您的用户 在这种情况下,它是deploybot