我正在尝试使用BLOB保存数据库中的文件。我知道这不是一个很好的做法,但需要这样做。
无论如何,我面临的问题是返回的PDF文件不再可读。但是当从blob转换回来时,所有其他文件,如docx,odt,txt,jpg等工作正常。
public function store(Request $request)
{
$data = $request->all();
$file = $request->file('file');
$data['data'] = base64_encode(file_get_contents($file));
$data['extension'] = $file->guessExtension();
$data['name'] = $file->getClientOriginalName();
$file = $this->fileRepo->create($data);
return jsend()->success()
->message("Resource Created Successfully")
->data($file->toArray())
->get();
}
public function download($id)
{
$file = $this->fileRepo->find($id);
$randomDir = md5(time() . $file->id . $file->user->id . str_random());
mkdir(public_path() . '/files/' . $randomDir);
$path = public_path() . '/files/' . $randomDir . '/' . html_entity_decode($file->name);
file_put_contents($path, base64_decode($file->data));
header('Content-Description: File Transfer');
return response()->download($path);
}
我哪里出错了,是否有特殊方法将PDF存储在blob字段中?
答案 0 :(得分:1)
标题可能被错误地返回,这导致文件显示不可读。
通过替换来强制他们:
header('Content-Description: File Transfer');
return response()->download($path);
使用:
$headers = array(
'Content-Description: File Transfer',
'Content-Type: application/octet-stream',
'Content-Disposition: attachment; filename="' . $file->name . '"',
);
return response()->download($path, $file->name, $headers);
答案 1 :(得分:0)
您可以像这样设置标题返回。你需要使用Laravel的回应即
public function download($id)
{
$file = $this->fileRepo->find($id);
$randomDir = md5(time() . $file->id . $file->user->id . str_random());
mkdir(public_path() . '/files/' . $randomDir);
$path = public_path() . '/files/' . $randomDir . '/' . html_entity_decode($file->name);
file_put_contents($path, base64_decode($file->data));
return response()->download($path)->header('Content-Description', 'File Transfer');
}