如何使用SpringBoot和Vue实现高效文件上传下载功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计976个文字,预计阅读时间需要4分钟。
本文以家庭分享为例,展示了使用SpringBoot+Vue实现文件上传下载的完整代码,供大家参考。具体内容如下:
一、文件上传(基于axios的简单上传)使用技术:axios、SpringBoot、Vue
实现思路:
1.前端使用axios发送文件上传请求;
2.后端接收文件并保存到服务器上。
代码示例:
javascript
// Vue前端export default { methods: { uploadFile() { const formData=new FormData(); formData.append(file, this.file); axios.post(http://localhost:8080/upload, formData).then((response)=> { console.log(response); }); } }};// SpringBoot后端@RestControllerpublic class FileController { @PostMapping(/upload) public ResponseEntity uploadFile(@RequestParam(file) MultipartFile file) { try { String originalFilename=file.getOriginalFilename(); String newFileName=UUID.randomUUID() + _ + originalFilename; File dest=new File(uploadPath + File.separator + newFileName); file.transferTo(dest); return ResponseEntity.ok(上传成功: + newFileName); } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(上传失败: + e.getMessage()); } }}
二、文件下载实现思路:
1.后端提供一个接口,根据文件名返回文件下载;
2.前端发送请求并使用a标签实现文件下载。
代码示例:
javascript
// Vue前端export default { methods: { downloadFile(filename) { axios.get(`http://localhost:8080/download/${filename}`, { responseType: blob }).then((response)=> { const url=window.URL.createObjectURL(new Blob([response.data])); const link=document.createElement(a); link.href=url; link.setAttribute(download, filename); // 设置下载文件名 document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); }); } }};// SpringBoot后端@RestControllerpublic class FileController { @GetMapping(/download/{filename}) public ResponseEntity downloadFile(@PathVariable String filename) { try { Resource resource=resourceLoader.getResource(classpath:files/ + filename); String contentType=applicationContentNegotiation.parseContentType(resource.getFilename()).orElseThrow(() -> new HttpMediaTypeNotAcceptableException()); return ResponseEntity.ok() .contentType(MediaType.parseMediaType(contentType)) .header(HttpHeaders.CONTENT_DISPOSITION, attachment; filename=\ + resource.getFilename() + \) .body(resource); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } }}
以上就是SpringBoot+Vue实现文件上传下载的简单示例。实际开发中,还需注意安全、异常处理等方面的问题。
本文实例为大家分享了springboot+vue实现文件上传下载的具体代码,供大家参考,具体内容如下
一、文件上传(基于axios的简单上传)
所使用的技术:axios、springboot、vue;
实现思路:通过h5 :input元素标签进行选择文件,获取所选选择的文件路径,new fromdata对象,设置fromdata的参数,设置axios对应的请求头,最后通过axios发送post请求后端服务。后端服务同过MultipartFile进行文件接收。具体代码如下:
前端代码:
1、创建vue对象
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import 127.0.0.1:8081/data/up", param, config) .then(response => { console.log(response.data); }).catch( error=>{ alert("失败"); } ); } } }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped lang="less"> </style>
后端代码:
上传文件代码
@RequestMapping(value = "/up", method = RequestMethod.POST) @ResponseBody public Result<String> uploade(@RequestParam("file") MultipartFile file) { try { log.error("开始上传!!!"); String originalFilename = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); String path="d:/2020test/"; File file1 = new File(path + originalFilename); if(!file1.getParentFile().exists()){ file1.getParentFile().mkdirs(); } file.transferTo(file1); log.info("上传成功!"); } catch (IOException e) { e.printStackTrace(); } Result<String> stringResult = new Result<String>(); stringResult.setMsg("sue"); stringResult.setData("file"); return stringResult; }
二、文件下载
通过response输出流返回文件内容,核心代码设置下载文件的名字(res.setHeader(“Content-Disposition”, “attachment;filename=” + java.net.URLEncoder.encode(realFileName.trim(), “UTF-8”));)
@RequestMapping(value = "/get", method = RequestMethod.GET) public void downloadFile(HttpServletResponse res) { String realFileName="C:/Users/xiongyi/Desktop/12.xls"; File excelFile = new File(realFileName); res.setCharacterEncoding("UTF-8"); res.setHeader("content-type", "application/octet-stream;charset=UTF-8"); res.setContentType("application/octet-stream;charset=UTF-8"); //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃” // res.addHeader("Content-Length", String.valueOf(excelFile.length())); try { res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(realFileName.trim(), "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } byte[] buff = new byte[1024]; BufferedInputStream bis = null; OutputStream os = null; try { os = res.getOutputStream(); bis = new BufferedInputStream(new FileInputStream(new File(realFileName))); int i = bis.read(buff); while (i != -1) { os.write(buff, 0, buff.length); os.flush(); i = bis.read(buff); } } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { } } } Result<String> stringResult = new Result<String>(); stringResult.setMsg("sue"); stringResult.setData("nimabi"); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。
本文共计976个文字,预计阅读时间需要4分钟。
本文以家庭分享为例,展示了使用SpringBoot+Vue实现文件上传下载的完整代码,供大家参考。具体内容如下:
一、文件上传(基于axios的简单上传)使用技术:axios、SpringBoot、Vue
实现思路:
1.前端使用axios发送文件上传请求;
2.后端接收文件并保存到服务器上。
代码示例:
javascript
// Vue前端export default { methods: { uploadFile() { const formData=new FormData(); formData.append(file, this.file); axios.post(http://localhost:8080/upload, formData).then((response)=> { console.log(response); }); } }};// SpringBoot后端@RestControllerpublic class FileController { @PostMapping(/upload) public ResponseEntity uploadFile(@RequestParam(file) MultipartFile file) { try { String originalFilename=file.getOriginalFilename(); String newFileName=UUID.randomUUID() + _ + originalFilename; File dest=new File(uploadPath + File.separator + newFileName); file.transferTo(dest); return ResponseEntity.ok(上传成功: + newFileName); } catch (IOException e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(上传失败: + e.getMessage()); } }}
二、文件下载实现思路:
1.后端提供一个接口,根据文件名返回文件下载;
2.前端发送请求并使用a标签实现文件下载。
代码示例:
javascript
// Vue前端export default { methods: { downloadFile(filename) { axios.get(`http://localhost:8080/download/${filename}`, { responseType: blob }).then((response)=> { const url=window.URL.createObjectURL(new Blob([response.data])); const link=document.createElement(a); link.href=url; link.setAttribute(download, filename); // 设置下载文件名 document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(url); }); } }};// SpringBoot后端@RestControllerpublic class FileController { @GetMapping(/download/{filename}) public ResponseEntity downloadFile(@PathVariable String filename) { try { Resource resource=resourceLoader.getResource(classpath:files/ + filename); String contentType=applicationContentNegotiation.parseContentType(resource.getFilename()).orElseThrow(() -> new HttpMediaTypeNotAcceptableException()); return ResponseEntity.ok() .contentType(MediaType.parseMediaType(contentType)) .header(HttpHeaders.CONTENT_DISPOSITION, attachment; filename=\ + resource.getFilename() + \) .body(resource); } catch (Exception e) { return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null); } }}
以上就是SpringBoot+Vue实现文件上传下载的简单示例。实际开发中,还需注意安全、异常处理等方面的问题。
本文实例为大家分享了springboot+vue实现文件上传下载的具体代码,供大家参考,具体内容如下
一、文件上传(基于axios的简单上传)
所使用的技术:axios、springboot、vue;
实现思路:通过h5 :input元素标签进行选择文件,获取所选选择的文件路径,new fromdata对象,设置fromdata的参数,设置axios对应的请求头,最后通过axios发送post请求后端服务。后端服务同过MultipartFile进行文件接收。具体代码如下:
前端代码:
1、创建vue对象
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' import 127.0.0.1:8081/data/up", param, config) .then(response => { console.log(response.data); }).catch( error=>{ alert("失败"); } ); } } }; </script> <!-- Add "scoped" attribute to limit CSS to this component only --> <style scoped lang="less"> </style>
后端代码:
上传文件代码
@RequestMapping(value = "/up", method = RequestMethod.POST) @ResponseBody public Result<String> uploade(@RequestParam("file") MultipartFile file) { try { log.error("开始上传!!!"); String originalFilename = file.getOriginalFilename(); InputStream inputStream = file.getInputStream(); String path="d:/2020test/"; File file1 = new File(path + originalFilename); if(!file1.getParentFile().exists()){ file1.getParentFile().mkdirs(); } file.transferTo(file1); log.info("上传成功!"); } catch (IOException e) { e.printStackTrace(); } Result<String> stringResult = new Result<String>(); stringResult.setMsg("sue"); stringResult.setData("file"); return stringResult; }
二、文件下载
通过response输出流返回文件内容,核心代码设置下载文件的名字(res.setHeader(“Content-Disposition”, “attachment;filename=” + java.net.URLEncoder.encode(realFileName.trim(), “UTF-8”));)
@RequestMapping(value = "/get", method = RequestMethod.GET) public void downloadFile(HttpServletResponse res) { String realFileName="C:/Users/xiongyi/Desktop/12.xls"; File excelFile = new File(realFileName); res.setCharacterEncoding("UTF-8"); res.setHeader("content-type", "application/octet-stream;charset=UTF-8"); res.setContentType("application/octet-stream;charset=UTF-8"); //加上设置大小下载下来的.xlsx文件打开时才不会报“Excel 已完成文件级验证和修复。此工作簿的某些部分可能已被修复或丢弃” // res.addHeader("Content-Length", String.valueOf(excelFile.length())); try { res.setHeader("Content-Disposition", "attachment;filename=" + java.net.URLEncoder.encode(realFileName.trim(), "UTF-8")); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } byte[] buff = new byte[1024]; BufferedInputStream bis = null; OutputStream os = null; try { os = res.getOutputStream(); bis = new BufferedInputStream(new FileInputStream(new File(realFileName))); int i = bis.read(buff); while (i != -1) { os.write(buff, 0, buff.length); os.flush(); i = bis.read(buff); } } catch (IOException e) { e.printStackTrace(); } finally { if (bis != null) { try { bis.close(); } catch (IOException e) { } } } Result<String> stringResult = new Result<String>(); stringResult.setMsg("sue"); stringResult.setData("nimabi"); }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易盾网络。

