2015-09-14 2 views
1

Я хочу, чтобы загрузить файл и что я написал этот код:Скачать файл в Java Spring REST API

public void downoadResume(@PathVariable("id") int id, HttpServletResponse response) { 
try { 
    Applicant applicant = applicantService.getOne(id); 
    File file = new File(DocumentConstants.DOCUMENTS_PATH + "/" + applicant.getOriginalDocPath()); 
    // get your file as InputStream 
    InputStreamReader is = new InputStreamReader(new FileInputStream(file.getAbsolutePath())); 
    // copy it to response's OutputStream 
    org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); 
    is.close(); 
    response.flushBuffer(); 
} catch (IOException ex) { 
    ex.printStackTrace(); 
} catch (ResourceNotFoundException e) { 
    e.printStackTrace(); 
} 

} 

Но я получаю такой ответ вместо файла, пожалуйста, проверьте:

PK!�?�*��[Content_Types].xml �(���Oo�@��H|k���i�8=��X*���8Y���3i�o��I�RLHs���罟��3��g��G�hc��e5? 
�Z|�ߕE?��Q.��P\�޿��7 ��ꀵX�OR�^?WX�?O���"��K����� �&�R�@��VC̦��QkG��3��%��P7�[�Z���Պ�T>�ʥ�9T\�݃+���1�thO�n�����dk�xP���g���&���g��pƦ���V-���3���O��a�?ġ�H���NZ�?c�˓qz�V2Y�3b��k����'��F/}(�i�ߞ`�{��wK�ۦ�]?����Z��w"���߿�r��p�<����g�x!> 
��H!�9�}/= 
���a�<����#:�����^���gQ'sȒGe7�x���x���h�K��G̻ޑ���9C���o٭��/��PK!���N_rels/.rels �(����JA���a�}7� 
"���H�w"����w̤ھ�� �P�^����O֛���;�<�aYՠ؛`G�kxm��PY�[��g 
Gΰino�/<���<�1��ⳆA$>"f3��\�ȾT�?I S?���������W����Y 
ig�@��X6_�]7~ 
f��ˉ�ao�.b*lI�r?j)�,l0�%?�b� 
6�i���D�_���, � ���|u�Z^t٢yǯ;!Y,}{�C��/h>��PK!����g�word/_rels/document.xml.rels �(����N�0��H�C�;�:`�[email protected]�����N[��U�{{¦u۲K/��G����?���:��*4)K���H�+S��-{��c�#arQ�?�������b�� ��+��E>�q)+���?,AcƟ(�Z?m�!?E|8����`ӽ��<O�?��~�j|���Q�J�#ʥCGJp0�A�W�2a��m��s2~��OG����C��}�W������ a�z֯�n��H��?KG�?���e�cު�"�I�f�'�7,^?�����1r�'�;��*!���Fϔ�}�n,�?���?ܜ`Е��PQ,Q�?K���x߀��)�WT>)�:�88 
5���;<oY 

Не могли бы вы рассказать мне, что я неправильно сделал в этом коде?

+0

Почему вы возвращаете пустоту вместо возврата ResponseEntity. Также вы показываете, как вы настроили свой контроллер. –

+4

его zip-файл, и вы не указали тип mime –

+0

@ WeareBorg- Я попытался с возвратом ResponseEntity, все еще получая тот же результат – Vipul

ответ

0

кажется, что вы скачиваете файл XLSX, попробуйте код ниже:

public void downoadResume(@PathVariable("id") int id, HttpServletResponse response) { 
    try { 
     Applicant applicant = applicantService.getOne(id); 
     File file = new File(DocumentConstants.DOCUMENTS_PATH + "/" + applicant.getOriginalDocPath()); 
response.reset(); 
      response.resetBuffer(); 
      response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); 
      response.setContentLength((int) file.length()); 
      response.setHeader("Content-Disposition", "attachment; filename=test.xlsx"); 
     // get your file as InputStream 
     InputStreamReader is = new InputStreamReader(new FileInputStream(file.getAbsolutePath())); 
     // copy it to response's OutputStream 
     org.apache.commons.io.IOUtils.copy(is, response.getOutputStream()); 
     is.close(); 
     response.flushBuffer(); 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } catch (ResourceNotFoundException e) { 
     e.printStackTrace(); 
    } 

    } 
+0

Нет. Я пытался загрузить файл .docx, а не файл xlsx, есть ли другой способ его определения для файлов разных типов. – Vipul

+0

Можете ли вы попробовать 'Files.probeContentType (DocumentConstants.DOCUMENTS_PATH +"/"+ invite.getOriginalDocPath()) 'как тип контента –

2

Вы должны установить заголовки ответа и тип содержимого, который запускает браузер для лечения содержимого ответа в виде файла и а не как веб-страницу:

response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");  
response.setHeader("Content-Disposition", "attachment; filename=download.xlsx"); 
+0

@ DSF- Я попробовал это для загрузки .docx, заменив код следующим образом: response.setContentType (" application/vnd.openxmlformats-officedocument.wordprocessingml.document "); response.setHeader («Content-Disposition», «attachment; filename = test.docx»); Хотя файл загружается, но он не сохраняется как файл .docx. В качестве имени файла используется очень длинное имя. – Vipul

+0

У вас может быть другое поведение, зависит от того, какой браузер вы используете. –

Смежные вопросы