java上传文件
此次只是演示没有考虑上传文件大小和上传文件的格式。
利用MultipartFile实现,代码如下:
/**
* 上传文件(可上传多个)
* @param request
* @param path 上传文件后的保存路径
*/
public Res<Void> demoUpload(HttpServletRequest request,String path){
//上传的文件名
String filename = "";
//上传后保存文件名
String name = "";
//上传后的文件
File dest = null;
//返回值
Res<Void> res = new Res<>();
// 获取MultipartFile的map表
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest)request;
Map<String,MultipartFile> files = multipartRequest.getFileMap();
if(files == null){
return res.error("不存在上传文件!");
}
Collection<MultipartFile> list = files.values();
//遍历上传文件
for (MultipartFile multipartFile : list) {
if(multipartFile == null){
return res.error("上传文件出现异常!");
}
if(StringUtils.isEmpty(path)){
return res.error("文件路径不能为空!");
}
//文件路径不存在就创建
File pathFile = new File(path);
if(!pathFile.exists()){
pathFile.mkdirs();
}
//获取上传文件名
filename = multipartFile.getOriginalFilename();
//获取文件的后缀 .xx 并系统生成存入文件名
name = UUID.randomUUID() + filename.substring(filename.lastIndexOf("."));
dest = new File(path,name);
try {
//上传文件
multipartFile.transferTo(dest);
return res.ok();
} catch (IOException e) {
e.printStackTrace();
return res.error("上传文件出现未知异常!");
}
}
}
下载文件
public void downLoad(HttpServletResponse response,String filePath,String fileName) {
//要下载的文件
File file = new File(filePath + File.separator + fileName);
try(FileInputStream inputStream = new FileInputStream(file);
OutputStream outputStream = response.getOutputStream()) {
//设置下载响应头
response.reset();
response.setCharacterEncoding("UTF-8");
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition","attachment;filename="
+ new String(fileName.getBytes(),"UTF-8"));
byte[] bytes = new byte[1024*10];
int len = -1;
while ((len = inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
} catch (IOException e) {
e.printStackTrace();
}
}