我有以下服务下载pdf文件:
$app->options('/docDownload',function(){}); // This one just so you can accept OPTIONS
$app->get('/docDownload', function () use ($app){
$path = "working.pdf";
$res = $app->response();
$res['Content-Description'] = 'File Transfer';
$res['Content-Type'] = 'application/octet-stream';
$res['Content-Disposition'] ='attachment; filename=' . basename($path);
$res['Content-Transfer-Encoding'] = 'binary';
$res['Expires'] = '0';
$res['Cache-Control'] = 'must-revalidate';
$res['Pragma'] = 'public';
$res['Content-Length'] = filesize($path);
readfile($path);
});
然而,当我运行该服务时,我收到了以下回复:
%PDF-1.5
% 1 0 obj <>>> endobj 2 0 obj <> endobj 3 0 obj <> / ExtGState<> / ProcSet [/ PDF / Text / ImageB / ImageC / ImageI]>> / MediaBox [0 0 595.32 841.92] / Contents 4 0 R / Group<> / Tabs / S / StructParents 0>> endobj 4 0 obj <> 流 xKk09J
|�� �@����J�C M!��$��bA,�ш]T�h�j��V0]���r���0��8R0L.F����70�3�}�8\�08L�V�Q��+�')��g��U;��V ��8�o�����o��Ip�I}�W_�r}��N'mգU��g>Ö�Ӎ���n>�D��.�-����<H
ABC \ǐ'=ٻXwczwx endstream endobj 5 0 obj &LT;&GT; endobj 6 0 obj &LT;&GT; endobj 7 0 obj &LT;&GT; endobj 8 0 obj .....
要打开pdf,我需要点击响应链接上的第二个鼠标按钮:
并选择在新标签页中打开以打开pdf文件,看起来您正在运行该服务两次以获取pdf文件一次。
我想自动打开每个WS请求的pdf文件。
这意味着每次请求WS时,都应返回在屏幕中直接打开的pdf文件。
有人可以帮我修理吗?
韩国社交协会
答案 0 :(得分:0)
也许你需要使用正确的MIME类型,试试这个
$res['Content-Type'] = 'application/pdf';
答案 1 :(得分:0)
解决方案可能是不使用AJAX调用下载文件(似乎您正在使用这种方式)。 这就是您的页面下载页面的方式:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
<script>
var PDF_DOWNLOAD_URL = "{{ urlFor('PDFDownload') }}";
$(function(){
//Your old way
$("button.download-file").click(function(){
$.ajax({
method: "GET",
url: PDF_DOWNLOAD_URL,
headers: { 'x-my-custom-header': 'some value' },
success: function(data){
console.log("Data received:", data);
}
});
});
});
</script>
</head>
<body>
<button type="button" class="download-file">Download the document</button>
</body>
</html>
您的路线应以这种方式定义名称:
$app->get('/docDownload', function () use ($app){
$path = "working.pdf";
$res = $app->response();
$res['Content-Description'] = 'File Transfer';
$res['Content-Type'] = 'application/json';
$res['Content-Transfer-Encoding'] = 'binary';
$res['Expires'] = '0';
$res['Cache-Control'] = 'must-revalidate';
$res['Pragma'] = 'public';
$fileData = file_get_contents($path);
$base64 = base64_encode($fileData);
$response = array();
$response['pdf'] = $base64;
$response['customKey'] = "My Custom Value";
echo json_encode($response);
})->name("PDFDownload");