Duas maneiras de implementar o download de arquivos no SpringMVC

1. Método convencional

    @RequestMapping("/download")
		public String download( String fileName ,String filePath, HttpServletRequest request, HttpServletResponse response){
					 
			response.setContentType("text/html;charset=utf-8");
			try {
				request.setCharacterEncoding("UTF-8");
			} catch (UnsupportedEncodingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
					
			java.io.BufferedInputStream bis = null;
			java.io.BufferedOutputStream bos = null;
		
			String downLoadPath = filePath;  //注意不同系统的分隔符
		//	String downLoadPath =filePath.replaceAll("/", "\\\\\\\\");   //replace replaceAll区别 *****  
			System.out.println(downLoadPath);
			
			try {
				long fileLength = new File(downLoadPath).length();
				response.setContentType("application/x-msdownload;");
				response.setHeader("Content-disposition", "attachment; filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1"));
				response.setHeader("Content-Length", String.valueOf(fileLength));
				bis = new BufferedInputStream(new FileInputStream(downLoadPath));
				bos = new BufferedOutputStream(response.getOutputStream());
				byte[] buff = new byte[2048];
				int bytesRead;
				while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
					bos.write(buff, 0, bytesRead);
				}
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				if (bis != null)
					try {
						bis.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				if (bos != null)
					try {
						bos.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
			return null;	
		}
	    
		
2. Usando o tipo ResponseEntity fornecido por springmvc, você pode usá-lo para definir facilmente os HttpHeaders e HttpStatus retornados.
RequestMapping("/download")  
	    public ResponseEntity<byte[]> export(String fileName,String filePath) throws IOException {  
	    	
	        HttpHeaders headers = new HttpHeaders();    
	        File file = new File(filePath);
	        
	        headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);    
	        headers.setContentDispositionFormData("attachment", fileName);    
	       
	        return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),    
	                                              headers, HttpStatus.CREATED);    
	    } 

Outra coisa a notar

A solicitação ajax não pode responder à função de download. Por causa da resposta, o navegador geralmente solicita a resposta do servidor, como gerar png, download de arquivo, etc. No entanto, a solicitação ajax é apenas uma solicitação de "caractere", ou seja , o conteúdo solicitado está no tipo de texto Armazenado. O arquivo é baixado na forma binária. Embora a resposta retornada possa ser lida, ela é apenas lida e não pode ser executada. O ponto branco é que js não pode chamar o mecanismo de processamento de download do navegador e o programa.

Recomenda-se usar este método para construir seu próprio formulário para envio

var form = $("<form>");
form.attr("style","display:none");
form.attr("target","");
form.attr("method","post");
form.attr("action",rootPath + "T_academic_essay/DownloadZipFile.do");
var input1 = $("<input>");
input1.attr("type","hidden");
input1.attr("name","strZipPath");
input1.attr("value",strZipPath);
$("body").append(form);
form.append(input1);
form.submit();
form.remove();


Acho que você gosta

Origin blog.csdn.net/a447332241/article/details/78998239
Recomendado
Clasificación