Php 如何下载带有改装2的pdf文件
我在下载带有改装的pdf文件时遇到困难。我的代码生成一个文件,但大小不正确,打开pdf时为空 这就是我的php Web服务返回pdf文件的方式Php 如何下载带有改装2的pdf文件,php,android,file,retrofit2,Php,Android,File,Retrofit2,我在下载带有改装的pdf文件时遇到困难。我的代码生成一个文件,但大小不正确,打开pdf时为空 这就是我的php Web服务返回pdf文件的方式 ** * @param Slim\Slim $app * @param String $pdf */ function respondWithPDF($app, $pdf) { $res = $app->response(); $res['Content-Description'] = 'File Transfer';
**
* @param Slim\Slim $app
* @param String $pdf
*/
function respondWithPDF($app, $pdf) {
$res = $app->response();
$res['Content-Description'] = 'File Transfer';
$res['Content-Type'] = 'application/octet-stream';
$res['Content-Disposition'] ='attachment; filename=' . basename($pdf);
$res['Content-Transfer-Encoding'] = 'binary';
$res['Expires'] = '0';
$res['Cache-Control'] = 'must-revalidate';
$res['Pragma'] = 'public';
$res['Content-Length'] = filesize($pdf);
readfile($pdf);
}
如果我通过浏览器导航到api端点,pdf文件会立即下载
这是我用来在Android中下载pdf文件的代码
private boolean writeResponseBodyToDisk(ResponseBody body, String fileName) {
try {
File futureStudioIconFile = new File(mContext.getExternalCacheDir() + File.separator + fileName);
InputStream inputStream = null;
OutputStream outputStream = null;
try {
byte[] fileReader = new byte[4096];
long fileSize = body.contentLength();
long fileSizeDownloaded = 0;
inputStream = body.byteStream();
outputStream = new FileOutputStream(futureStudioIconFile);
while (true) {
int read = inputStream.read(fileReader);
if (read == -1) {
break;
}
outputStream.write(fileReader, 0, read);
fileSizeDownloaded += read;
Log.d(Constants.LOG_TAG, "file download: " + fileSizeDownloaded + " of " + fileSize);
}
outputStream.flush();
return true;
} catch (IOException e) {
return false;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
} catch (IOException e) {
return false;
}
}
我已经记录了http响应。以下是我在pdf中得到的回复
D:╔════════════════════════════════════════════════════════════════════════════════════════
D:║ 线程:OkHttphttps://192.168.1.15/mamobile/index.php/report/activity?startDate=3916-08-15%2000:00:00.000&endDate=3916-02-01%2000:00:00.000
D:╟────────────────────────────────────────────────────────────────────────────────────────
D:║ 调用$ApplicationInterceptorChain.procedure(Call.java:232)
D:║ ApiClient$LoggingInterceptor.intercept(ApiClient.java:247)
D:╟────────────────────────────────────────────────────────────────────────────────────────
D:║ 响应
D:║ 收到对的答复https://192.168.1.15/mamobile/index.php/report/activity?startDate=3916-08-15%2000:00:00.000&endDate=3916-02-01%2000:00:00.000,5190.8毫秒
D:║ 缓存控制:必须重新验证
D:║ 布拉格语:公共
D:║ 内容长度:60942
D:║ 内容类型:应用程序/八位字节流
D:║ 过期日期:0
D:║ 服务器:Microsoft IIS/10.0
D:║ X-Powered-By:PHP/5.4.24
D:║ 内容描述:文件传输
D:║ 内容处置:附件;filename=活动报告.pdf
D:║ 内容传输编码:二进制
D:║ X-Powered-By:ASP.NET
D:║ 日期:2016年7月20日星期三格林尼治标准时间16:52:17
D:║ OkHttp发送的邮件:146903539269
D:║ OkHttp收到的毫秒数:1469033544169
D:║
D:║ %PDF-1.3
D:║ %����
D:║ 10 obj
D:║
D:║ >>
D:║ endobj
D:║ 50 obj
D:║ >
D:║ 流动
D:║ v�X����:`��)��05~�Z��gղZ?U+�智商�A.����+@�L��l1�9��~v����X�]���我�0��=�ěg���o'@���)[P�2l��z\��jwL�}����Bk���Q��J^�;�~苏氨酸�ړ�������>在�d1K*։w��C�]�哦��N�N��我�� {�R�v�.���;�G*[��4.�\L��6.�˰�_�\��Љ�/�V6^�����铬*�f|
D:║ ����B'����2.�G�J��v�艾尔!�
D:║ ��~复写的副本����Q��B�1.�V1��+`
D:║ 流动
D:║ ���������]U�r}�a> ǁ�
D:║ 54����Q��DY“v�2.���|t-�/@JN@��N���]R��我�����OD;�J�J、 B��Q�W��
D:║ �&��f؇������lԃ��v���`?\�[�}�A.�E�~0p�N�K�迀4.�`�л�����Q������7.�[H]�9�����=>"5.����]=��O���=qz���`F���|��W�
D:║ �
D:║ R�ڔ�E�6{ѢcL��R8J�!��M�_C[8��Q� �}�]
D:║ }�弗吉尼亚州�0B&���!��¨:�F�R(��乌尔���R��#2.��"��!+�E�F�Sԧ%XA�51u�N�\홅�fz��O�蜡{���Pݤ�!��.!1!Z��
D:║ *交流电��X�#[�-jc���[整箱��Y��,�T��@U�P�� �R�� ،�-����F���F�j> m�3秒�,�=�B3kv8Wv$�R�h(�A.�D��9�C��rrU�K�s���U���b=� ��|�������A.���'�WzG�$�ʑ�rR���?��!l>��?�aF�Z=���OY7٫��W�?ҝ8�U�Q���U(�㐎G��u4-GA�2.����Z��ڝ(
D:║ �zס����O�}�O��¿���;�+�Y�P������� �D��H�U=����
D:║ ��F�C�[���났`�转速\����%�+����E�T�y(\�6\�Ԫ��
D:║ ���
D:║ �*A.�顾ꇫ�U�
D:║ �r7���U�J�9����我��~VNN&q����M����[ �%}϶5^��G��7.���D˲�kh
D:║ B) 三十六��B(䆜足球俱乐部��ܗ���щ�C�N�G���1.�
D:║ 安永��ד��=^��/@t`�1.
D:║ �,���S0hGE���P�ԩS\�S_?
D:║ (�������ä���=��;��[�R���ä����燃气轮机��3#jϔ��M�v�#T���T��v�_�\�̗����v�|�>� ���P�Z��s�K�oA=T��(U)�:��@��ā�̕u����1.�加尔(K)����y8+��Q�1.���3.�E����R�J�v��8j�E�U��1.�Sy�\���qRq� e9Q�M���7VĿ��sk�>���.��M�K����Ł;�?\���[O]����۲r�1o�tƎ9�o*'��E�瓦什�X0�A.�+���ɫ���J�~U�R~�
D:║ v���E� �£ȃ�c{ˑ{��,X�基尼����%�E�����D�GnY��D7p���R��?8.���[o]��pF����Z�先生��W���}RZ:!��D���北京��_�C��ǪLcSV^F�- ���$E�JGI��q]��-o��������E��B�C��g++���U��.��Ǖ�]�-�Ҕ~=6��6.�Ϝ��ԓe���*�{�W�是�JXĘ��$�v��电子战��s�#Yz�艾伊�ʧ��=XZ?xo�.�#N=uFf4�kQ!�ƓRF���!̗�W您可以看到以下链接:
设置适当的标题,不要忘记annotation@Streaming。它对我很有效。我用不同类型的文件测试了它,它很有效
我使用的是旧版本的改型和Okhttp。一旦我更新到新版本,它就起作用了。我已经尝试过了