#php #laravel
#php #laravel
Вопрос:
мне удалось создать функцию загрузки, которая работает, и мне удалось загрузить один файл, вот моя функция загрузки :
public function download($id)
{
try{
$test = DB::table('media_order')->where('id',$id)->get();
$string = '/storage/file/' . $test[0]->attachment_name;
return $string;
}catch (Exception $e){
return $e->getMessage();
}
}
и я попытался создать несколько загружаемых файлов, в которых находится файл implode()
, но я не знаю, как explode()
это сделать, а затем загрузить его сразу.
Вот мой function create
в моем контроллере на всякий случай :
if($files = $request->file('attachment_name'))
{
foreach($request->file('attachment_name') as $image )
{
$name = date('dmY') . "-" .$image->getClientOriginalName();
$image->move(public_path().'/storage/file/', $name);
$datatest[] = $name;
}
}
$insert['attachment_name'] = implode("|",$datatest);
До сих пор я пытался использовать explode()
, но в итоге это не сработало и ошибка, а также я пытался использовать zip
, например, так :
public function download($id)
{
$zip = new ZipArchive();
$file_path = public_path()."/storage/file/";
$row = DB::table('media_order')->where('id',$id)->get()->first();
if($zip->open($file_path, ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE) !== TRUE){
die("Error");
}
if($row){
$files = $row->attachment_name;
$files = explode("|",$files);
foreach($files as $key => $file){
$zip->addFile($file_path.$file,$file);
}
// header("Location:".Request::root()."/uploads/");
}
$zip->close();
return Response::download( public_path().'/storage/file/'. );
}
И, конечно, это не работает, у кого-нибудь есть способ решить эту проблему, чтобы я мог загружать файлы с несколькими массивами на основе их id
и из массива, который был explode()
?, прошу прощения за мой английский и спасибо!
Обновить :
для первой ошибки из :
$file_path = public_path()."/storage/file/zipped.zip";
сообщение об ошибке выглядит следующим образом :
message: "The file "C:\xampp\htdocs\ereport-master\public/storage/file/zipped.zip"
а также я тоже сделал что-то подобное :
$file_path = public_path()."storagefile";
но также ошибка 404 не найдена.
следующий, который я попробовал, это :
$file_path = public_path()."/storage/file/";
но теперь возникает ошибка $zip->close();
, которая приводит к такой ошибке :
message: "ZipArchive::close(): Renaming temporary file failed: Permission denied"
Ответ №1:
вместо
$file_path = public_path()."/storage/file/";
return Response::download( public_path().'/storage/file/'. );
должно быть что-то вроде
$file_path = public_path()."/storage/file/zipped.zip";
return Response::download( $file_path );
Комментарии:
1. я попробовал
$file_path = public_path()."/storage/file/zipped.zip";
, но в итоге он не был найден, поэтому я возвращаюсь к оригиналу$file_path
, я следил за остальными, но не сталкивался с такой ошибкой, как"ZipArchive::close(): Renaming temporary file failed: Permission denied"
2. что не найдено?
zipped.zip
файл или файлы, которые вы получаете$files = explode("|",$files);
. Ошибка «Отказано в разрешении» может быть исправлена с помощью правильного разрешения папки; предпочтительно777
и настройки пользователя папки какwww-data
3.
"/storage/file/zipped.zip"
не найден4. о, и я не знаю, как исправить разрешение папки, какой файл или настройку необходимо изменить?, прости меня, я все еще новичок в этом.
5. для файла, который не найден, не должно быть ошибки, используя
ZIPARCHIVE::CREATE | ZIPARCHIVE::OVERWRITE
можете ли вы точно указать, что такое сообщение об ошибке и в какой строке оно выдает ошибку. для разрешения файлов вам нужно беспокоиться о системах Unix, а не о Windows в основном. Я буду ссылаться на это guru99.com/file-permissions.html