package com.example.study.springmvc.controller;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class DownLoadController {
/**
* @Description 下载文件
* @param request
* HttpServletRequest对象
* @param srcFileName
* 需要下载的文件名,@RequestParam("fileName")表示请求参数名为fileName
* @return
* @throws IOException
*/
@RequestMapping("/download")
@ResponseBody
public ResponseEntity<byte[]> download(HttpServletRequest request,
@RequestParam("fileName") String srcFileName) throws IOException {
// 下载的目标文件路径
String destPath = request.getServletContext().getRealPath("WEB-INF/upload/");
// 下载的目标文件
File destFile = new File(destPath + srcFileName);
// 处理下载文件名中文乱码问题
String downFileName = new String(srcFileName.getBytes("UTF-8"), "iso-8859-1");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", downFileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(destFile),
headers, HttpStatus.CREATED);
}
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class DownLoadController {
/**
* @Description 下载文件
* @param request
* HttpServletRequest对象
* @param srcFileName
* 需要下载的文件名,@RequestParam("fileName")表示请求参数名为fileName
* @return
* @throws IOException
*/
@RequestMapping("/download")
@ResponseBody
public ResponseEntity<byte[]> download(HttpServletRequest request,
@RequestParam("fileName") String srcFileName) throws IOException {
// 下载的目标文件路径
String destPath = request.getServletContext().getRealPath("WEB-INF/upload/");
// 下载的目标文件
File destFile = new File(destPath + srcFileName);
// 处理下载文件名中文乱码问题
String downFileName = new String(srcFileName.getBytes("UTF-8"), "iso-8859-1");
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", downFileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(destFile),
headers, HttpStatus.CREATED);
}
}
jsp页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>download页面</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/download?fileName=中文.txt ">下载1.txt</a><br/><br/>
<a href="${pageContext.request.contextPath}/download?fileName=2.txt ">下载2.txt</a><br/><br/>
<a href="${pageContext.request.contextPath}/download?fileName=1.jpg ">下载1.jpg</a><br/><br/>
</body>
</html>