@RequestMapping
(params =
"downfile"
)
public
void
downfile(HttpServletRequest request,HttpServletResponse response)
throws
Exception{
Long fileID = ServletRequestUtils.getLongParameter(request,
"id"
,
0
);
BufferedInputStream bis =
null
;
BufferedOutputStream bos =
null
;
OutputStream fos =
null
;
InputStream fis =
null
;
String result =
""
;
if
(
null
!= fileID){
UserFiles userFiles =
this
.userFileDao.findObject(fileID);
if
(userFiles !=
null
){
File downFiles =
new
File(userFiles.getFileCurrPath()+userFiles.getFileName()+
"."
+userFiles.getFileType());
if
(!downFiles.exists()){
return
;
}
try
{
fis =
new
FileInputStream(downFiles);
bis =
new
BufferedInputStream(fis);
fos = response.getOutputStream();
bos =
new
BufferedOutputStream(fos);
ServletUtils.setFileDownloadHeader(request,response, userFiles.getFileName()+
"."
+userFiles.getFileType());
int
byteRead =
0
;
byte
[] buffer =
new
byte
[
8192
];
while
((byteRead=bis.read(buffer,
0
,
8192
))!=-
1
){
bos.write(buffer,
0
,byteRead);
}
bos.flush();
fis.close();
bis.close();
fos.close();
bos.close();
}
catch
(Exception e) {
log.info(
"下载失败了......"
);
}
}
}
}
/**
* 设置让浏览器弹出下载对话框的Header.
* 根据浏览器的不同设置不同的编码格式 防止中文乱码
* @param fileName 下载后的文件名.
*/
public
static
void
setFileDownloadHeader(HttpServletRequest request,HttpServletResponse response, String fileName) {
try
{
//中文文件名支持
String encodedfileName =
null
;
String agent = request.getHeader(
"USER-AGENT"
);
if
(
null
!= agent && -
1
!= agent.indexOf(
"MSIE"
)){
//IE
encodedfileName = java.net.URLEncoder.encode(fileName,
"UTF-8"
);
}
else
if
(
null
!= agent && -
1
!= agent.indexOf(
"Mozilla"
)){
encodedfileName =
new
String (fileName.getBytes(
"UTF-8"
),
"iso-8859-1"
);
}
else
{
encodedfileName = java.net.URLEncoder.encode(fileName,
"UTF-8"
);
}
response.setHeader(
"Content-Disposition"
,
"attachment; filename=\""
+ encodedfileName +
"\""
);
}
catch
(UnsupportedEncodingException e) {
e.printStackTrace();
}
}
package
com.sniper.springmvc.action;
import
java.io.File;
import
java.io.FileInputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.UnsupportedEncodingException;
import
java.net.URLEncoder;
import
org.springframework.http.HttpHeaders;
import
org.springframework.http.HttpStatus;
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;
import
com.sniper.springmvc.utils.ValidateUtil;
@Controller
public
class
FileDownloadAction
extends
RootAction {
// 下载mime//application/vnd.ms-excel
private
String contentType =
"application/vnd.ms-excel"
;
// 下在文件名字,,一般取值为attachement;filename="ss.pdf"
private
String fileName;
private
String filePath;
public
String getFileName()
throws
UnsupportedEncodingException {
fileName = filePath.substring(filePath.lastIndexOf(
"/"
) +
1
);
String Agent = request.getHeader(
"User-Agent"
);
if
(
null
!= Agent) {
Agent = Agent.toLowerCase();
if
(Agent.indexOf(
"firefox"
) != -
1
) {
fileName =
new
String(fileName.getBytes(),
"iso8859-1"
);
}
else
if
(Agent.indexOf(
"msie"
) != -
1
) {
fileName = URLEncoder.encode(fileName,
"UTF-8"
);
}
else
{
fileName = URLEncoder.encode(fileName,
"UTF-8"
);
}
}
return
fileName;
}
/**
* 需要通过 redirect:download 传递文件路径或者文件类型
*
* @param path
* @param type
* @return
* @throws IOException
*/
@ResponseBody
@RequestMapping
(value =
"download"
)
public
ResponseEntity<
byte
[]> download(
@RequestParam
(value =
"path"
) String path,
@RequestParam
(value =
"type"
, required =
false
) String type)
throws
IOException {
// 确定各个成员变量的值
this
.filePath = path;
if
(ValidateUtil.isValid(contentType)) {
this
.contentType = type;
}
HttpHeaders headers =
new
HttpHeaders();
byte
[] body =
null
;
HttpStatus httpState = HttpStatus.NOT_FOUND;
File file =
new
File(path);
if
(file.exists() && file.isFile()) {
InputStream is =
new
FileInputStream(file);
body =
new
byte
[is.available()];
is.read(body);
is.close();
headers.add(
"Content-Type"
,
this
.contentType);
headers.add(
"Content-Length"
,
""
+ body.length);
headers.add(
"Content-Disposition"
,
"attachment;filename="
+ getFileName());
httpState = HttpStatus.OK;
}
ResponseEntity<
byte
[]> entity =
new
ResponseEntity<>(body, headers,
httpState);
return
entity;
}
}