我使用Laravel获取文件并发回给用户进行自动下载。这是我的代码:
public function postGetFile() {
$inputData = $this->request->json()->all();
try {
$file = $this->processor->postGetFile($inputData);
// Feed the file to web browser.
header('Content-Description: File Transfer');
header('Content-Type: '.mime_content_type($file));
header('Content-Disposition: attachment; filename="'.basename($file).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Access-Control-Allow-Origin: *');
if (ob_get_length()) {
ob_end_clean();
}
flush();
readfile($file);
exit;
return $this->response->success()->withData($file);
} catch (ResponseException $e) {
return $this->response->fail()->withException($e);
}
}
我的问题是我得到了正确的文件,但不知何故文件被更改了。下载文件的文件大小与服务器上的原始文件不同,因此传输中的文件很明显。任何人都可以看到这里可能出现的问题吗?
修改
由于评论中的建议,尝试了以下内容:
public function postGetFile() {
$inputData = $this->request->json()->all();
try {
$file = $this->processor->postGetFile($inputData);
$headers = array(
'Content-Type: '.mime_content_type($file),
'Access-Control-Allow-Origin: *'
);
// Tried both of the following, none worked.
return response()->download($file, basename($file), $headers);
return $this->response->download($file, basename($file), $headers);
} catch (ResponseException $e) {
return $this->response->fail()->withException($e);
}
}
我得到的只是控制台中出现以下错误:XMLHttpRequest cannot load http://docker//admin/files/getfile. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:9900' is therefore not allowed access. The response had HTTP status code 500.
“网络”标签不提供任何数据。只有"无法加载响应数据"。
答案 0 :(得分:1)
您可以使用Laravel Http Response:
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
您可以阅读更多here