我有文件夹结构年/月/日。我需要在年/月/日的目录中上传图片,例如2016/03/08 / example.jpg。
public function UpdateImage(Request $request){
$year = date("Y");
$year = public_path().'/upload/userimage/'.$year;
if(!file_exists ($year)){
$month = date("m");
$month = $year."/".$month;
if(!file_exists ($year)){
mkdir($month, 0777, true);
chmod($year, 0777);
chmod($month, 0777);
}
$day = date("d");
$day = public_path().'/upload/userimage/'.date("Y")."/".date("m")."/".date("d");
if(!file_exists ($day)){
mkdir($day, 0777, true);
chmod($day, 0777);
}
}else{
$month = date("m");
$month = public_path().'/upload/userimage/'.date("Y")."/".date("m");
if(!file_exists ($month)){
mkdir($month, 0777, true);
chmod($year, 0777);
chmod($month, 0777);
}
$day = date("d");
$day = public_path().'/upload/userimage/'.date("Y")."/".date("m")."/".date("d");
if(!file_exists ($day)){
mkdir($day, 0777, true);
chmod($day, 0777);
}
}
$url = public_path().'/upload/userimage/'.date("Y")."/".date("m")."/".date("d");
$data = $_POST['imageData'];
$userIdx = $_POST['id'];
$delImage = DB::table('user')->where('UserIdx', $userIdx)->first();
$filename = $url.$delImage->PhotoFilePathName;
if(file_exists($filename)){
//unlink($filename);
}
$imageName = date("Y")."/".date("m")."/".date("d")."/".hash('ripemd160', time()).'.png';
DB::table('user')
->where('UserIdx', $userIdx)
->update(array('PhotoFilePathName' => $imageName));
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
file_put_contents($url, $data);
}
但是上传图片时收到此错误。
file_put_contents(/var/www/html/sitename/public/upload/userimage/2016/03/08): failed to open stream: Is a directory.
请帮助解决此问题并查看我的代码。
答案 0 :(得分:1)
问题是你给了file_put_contents
的文件夹路径,你可以通过给它文件路径来解决这个问题。但是还有其他一些方面你可以改进你的功能,例如文件夹创建过程,你提供给mkdir的第三个参数是用于创建递归文件夹,如果你不需要分别创建年/月/日目录用那个标志。尝试以下代码,它将解决您的功能问题:
public function UpdateImage(Request $request){
$folderPath = '';
$year = date('Y');
$month = date('m');
$day = date('d');
$folderPath = $year . "/" . $month . "/" . $day;
$baseUrl = public_path().'/upload/userimage/';
if(!file_exists ($baseUrl . $folderPath)) {
mkdir($baseUrl . $folderPath, 0777, true);
chmod($baseUrl . $year, 0777);
chmod($baseUrl . $month, 0777);
chmod($baseUrl . $day, 0777);
}
$data = $_POST['imageData'];
$userIdx = $_POST['id'];
$delImage = DB::table('user')->where('UserIdx', $userIdx)->first();
$filename = $baseUrl.$delImage->PhotoFilePathName;
if(file_exists($filename)){
//unlink($filename);
}
$imageName = $folderPath . "/" . hash('ripemd160', time()).'.png';
DB::table('user')
->where('UserIdx', $userIdx)
->update(array('PhotoFilePathName' => $imageName));
list($type, $data) = explode(';', $data);
list(, $data) = explode(',', $data);
$data = base64_decode($data);
file_put_contents($baseUrl . $imageName, $data);
}