Browser file download not working for a file stored on server

时光毁灭记忆、已成空白 提交于 2020-01-06 03:32:05

问题


I have a file on server which is to be downloaded using the browser download. No error is being thrown but no download window appears for the file download. Please help.

My controller code is:

  @RequestMapping(value = "download", method = RequestMethod.GET)
   public void downloadFile(
        @ModelAttribute("path") final String path, HttpServletRequest  request, HttpServletResponse response) throws Exception {
    try {

        logger.error("inside download get try");    
        ServletContext context = request.getServletContext();
        File downloadFile = new File(path);
        FileInputStream inputStream = new FileInputStream(downloadFile);
        // get MIME type of the file
        String mimeType = context.getMimeType(path);
        if (mimeType == null) {
            // set to binary type if MIME mapping not found
            mimeType = "application/octet-stream";
        }
        response.setContentType(mimeType);
        response.setContentLength((int) downloadFile.length());
        // set headers for the response
        String headerKey = "Content-Disposition";
        String headerValue = String.format("attachment; filename=\"%s\"",
                downloadFile.getName());
        response.setHeader(headerKey, headerValue);
        // get output stream of the response
        OutputStream outStream = response.getOutputStream();
        byte[] buffer = new byte[BUFFER_SIZE];
        int bytesRead = -1;
        // write bytes read from the input stream into the output stream
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            outStream.write(buffer, 0, bytesRead);
        }

        inputStream.close();
        outStream.close();



    } catch (Exception e) {
        logger.error("inside download get catch");          
        throw new IndiciumException("Can't download the audit file");
    }

My response in the firebug is like:

%PDF-1.4
%����
5 0 obj
<</Filter/FlateDecode/Length 502>>stream
x��T]o�0}�W���!��?��F�eʤ�k���4x]�����ʿ�
Nł��Ea||���^�Mt�cHi��PpBc��m��F�#
��h�?N����a~��3��=,r}�_����J8M��*u��[q(q�$U)�?��|o�:�|     
�P�T�
/�Ƭ���|��m��~\_��X�*���m98 s��_��+�c��ut�77��v��ݻ��(M       
�V�K���@�m�w��=�HS����(Х-�8���ն
ܮJ�g��a1������M�Ƿ��3E��&Ǧ!��$a|ܩ�вb���$цT�kSׁ8�m�>��
�0E(����|�BJb �?����f2.3�8�'�sbϰLި�O9ˎ�    
endstream
endobj
7 0 obj
<</Contents 5 0 R/Type/Page/Resources<</ProcSet [/PDF /Text /ImageB /ImageC    
/ImageI]/Font<</F1 1 0 R
/F2 2 0 R/F3 3 0 R/F4 4 0 R>>>>/Parent 6 0 R/MediaBox[0 0 595 842]>>
endobj
1 0 obj
<</Subtype/Type1/Type/Font/BaseFont/Times-Bold/Encoding/WinAnsiEncoding>>
endobj
2 0 obj
<</Subtype/Type1/Type/Font/BaseFont/Times-Italic/Encoding/WinAnsiEncoding>>
endobj
3 0 obj
<</Subtype/Type1/Type/Font/BaseFont/Helvetica/Encoding/WinAnsiEncoding>>
endobj
4 0 obj
<</Subtype/Type1/Type/Font/BaseFont/Times-Roman/Encoding/WinAnsiEncoding>>
endobj
6 0 obj
<</Kids[7 0 R]/Type/Pages/Count 1/ITXT(5.0.6)>>
endobj
8 0 obj
<</Type/Catalog/Pages 6 0 R>>
endobj
9 0 obj        
1T3XT BVBA)>>
endobj
xref
0 10
0000000000 65535 f 
0000000768 00000 n 
0000000857 00000 n 
trailer
<</Info 9 0 R/ID [<1b6717a8f36527b1db89d35fc22e9da5>     
<c2e3cf9ec60f1d29ea766dc>]/Root 8 0 R/Size
10>>
startxref
1364
%%EOF

And the response header is:

Cache-Control   
must-revalidate, post-check=0, pre-check=0


Content-Disposition 
attachment; filename = exportpdf1432033492.pdf


Content-Type    
application/pdf


Date    
Tue, 19 May 2015 11:04:52 GMT


Expires 
0


Pragma  
no-cache


Server  
Apache-Coyote/1.1


Transfer-Encoding   
chunked


X-Frame-Options 
DENY


X-XSS-Protection    
1; mode=block


x-content-type-options  
nosniff

回答1:


From the top of my head:

It seems your code is writing properly to response's output stream so maybe you just need to call flush() on it when your done writing. I was in a similar situation some time ago.



来源:https://stackoverflow.com/questions/30302049/browser-file-download-not-working-for-a-file-stored-on-server

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!