(Spring)文件上传和下载
文件上传的时候,浏览器将图片以MultipartFile的形式传到服务器,服务器将保存完的图片名响应给浏览器。
文件下载的时候,浏览器收到图片名,再向服务器请求图片资源,服务器以流的形式在浏览器上显示。
所以在浏览器的视角里,上传完图片就能立刻看到效果。
步骤:
1:文件上传
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | /** * 文件上传 * @param file * @return */ @PostMapping( "/upload" ) public R<String> upload(MultipartFile file){ //file是个临时文件,需要转存到指定位置,否则本次请求完成后临时文件会删除 // 原始文件名 String originalFilename= file.getOriginalFilename(); String suffix = originalFilename.substring(originalFilename.lastIndexOf( "." )); // 使用UUID重新生成文件名,防止文件名称重复造成文件覆盖 String fileName = UUID.randomUUID().toString() + suffix; // 创建一个目录对象 File dir = new File(basePath); // 判断当前目录是否存在 if (!dir.exists()){ // 目录不存在,需要创建 dir.mkdirs(); } try { //文件转存 file.transferTo( new File(basePath + fileName)); } catch (IOException e) { e.printStackTrace(); } return R.success(fileName); } |
2:文件下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | /** * 文件下载 * @param name * @param response */ @GetMapping( "/download" ) public void dewnload(String name, HttpServletResponse response){ try { //输入流,读取文件内容 FileInputStream fileInputStream = new FileInputStream( new File(basePath + name)); //输出流,通过输出流将文件写回浏览器,在浏览器展示图片 ServletOutputStream outputStream = response.getOutputStream(); response.setContentType( "image/jpeg" ); int len = 0; byte [] bytes = new byte [1024]; //使用bytes数组从输入流读取图片内容,然后再写入输出流 while ((len = fileInputStream.read(bytes)) != -1){ outputStream.write(bytes,0,len); outputStream.flush(); } // 关闭资源 outputStream.close(); fileInputStream.close(); } catch (Exception e) { e.printStackTrace(); } } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· DeepSeek “源神”启动!「GitHub 热点速览」
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器