博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进击的java(5) spring mvc 文件上传下载
阅读量:6713 次
发布时间:2019-06-25

本文共 2990 字,大约阅读时间需要 9 分钟。

hot3.png

###spring mvc 文件上传下载

####上传

  • 用MultipartFile来上传文件,上传到本地指定路径下

  • controller:

    @RequestMapping(value = "/upload")  @ResponseBody  public String upload(@RequestParam("file") MultipartFile file,  	@RequestParam("type") Integer type, HttpServletRequest request,  	HttpServletResponse response) {  	Preconditions.checkNotNull(type);  	Preconditions.checkNotNull(file);  	Preconditions.checkArgument(file.getSize() < Constants.FILE_MAX_SIZE);  	Preconditions.checkArgument(Constants.FILE_TYPE_MAP.containsKey(type));  	if (!this.validate(file)) {  		return JsonReply.newItem().failed().toJson();  	}  	String path = request.getSession().getServletContext().getRealPath("/");  	Long fileId = fileService.saveFile(file, type, path);  	if (fileId.equals(Constants.ERROR_LONG)) {  		return JsonReply.newItem().failed().toJson();  	}  	JsonReply reply = JsonReply.newItem();  	reply.addObject("id", fileId);  	return reply.success().toJson();  }

type是对类型做一个分类,不同类别放到不同文件夹下

  • service:

    @Override  public Long saveFile(@NonNull MultipartFile multipartFile, Integer type,  	String path) {  	// TODO Auto-generated method stub  	String originalName = multipartFile.getOriginalFilename();  	// String fileDir = path + originalName;  	String fileDir = Constants.FILE_DIR + Constants.FILE_TYPE_MAP.get(type)  			+ originalName;  	final File file = new File(fileDir);  	try {  		Files.write(multipartFile.getBytes(), file);  	} catch (IOException e) {  		// TODO: handle exception  		log.info("save file error,{}", e);  		return Constants.ERROR_LONG;  	}  	FileBo fileBo = new FileBo();  	fileBo.setUrl(originalName);  	fileBo.setType(type);  	fileDao.saveFileInfo(fileBo);  	return fileBo.getId();

    }

  • 前端:

      
    上传文件:

#####下载

  • 用HttpServletResponse来下载,但是不是最好的选择,今后改

  • controller:

    @RequestMapping(value = "/download/{id}")  public void file(@PathVariable Long id, HttpServletResponse resp)  	throws IOException {  	OutputStream output = resp.getOutputStream();  	Preconditions.checkNotNull(id);  	FileBo file = fileService.getFileBo(id);  	if (file == null) {  		return;  	}  	String disposition = "attachment;filename=" + file.getUrl();  	resp.reset();  	resp.setHeader("Content-Disposition", disposition);  	resp.setContentType("application/octet-stream; charset=utf-8");  	try {  		fileService.download(file, output);  	} catch (IOException e) {  		// TODO: handle exception  		log.info("FileController.file failed.[{e}]", e);  	} finally {  		IOUtils.closeQuietly(output);  	}  }
  • service

    @Override  public void download(FileBo file, OutputStream output) throws IOException {  	// TODO Auto-generated method stub  	String fileDir = Constants.FILE_DIR  			+ Constants.FILE_TYPE_MAP.get(file.getType()) + file.getUrl();  	final File downloadFile = new File(fileDir);  	output.write(FileUtils.readFileToByteArray(downloadFile));  }

转载于:https://my.oschina.net/SearchVera/blog/468861

你可能感兴趣的文章
解决JsonFormat日期少一天问题
查看>>
POJ 1201 Intervals
查看>>
linux下串口调试工具
查看>>
[转]如何在 .Net Framework 4.0 项目上使用 OData?
查看>>
UVa 12279 - Emoogle Balance
查看>>
头文件algorithm中的常用函数
查看>>
一套解决方案,多个项目
查看>>
Qt3D Shader
查看>>
Android requires compiler compliance level 5.0 or 6.0. Found &#39;1.4&#39; instead的解决的方法
查看>>
dede文章插入分页符不起作用,编辑器中出现分页符,导致文章显示不全
查看>>
【POJ3377】Ferry Lanes 最短路
查看>>
sqlplus登录提示:ORA-12162:TNS:net service name is incorrectly specified错误
查看>>
Java Scanner 类
查看>>
zoj 1655 单源最短路 改为比例+最长路
查看>>
impulse
查看>>
Deep Learning 教程翻译
查看>>
贪心算法
查看>>
SDL示例一:实现七段数码管的显示
查看>>
Hive权限之审计
查看>>
Redis的安装与使用
查看>>