springboot+vue实现文件上传下载
本文实例为大家分享了springboot+vue实现文件上传下载的具体代码,供大家参考,具体内容如下
一、文件上传(基于axios的简单上传)
所使用的技术:axios、springboot、vue;
实现思路:通过h5:input元素标签进行选择文件,获取所选选择的文件路径,newfromdata对象,设置fromdata的参数,设置axios对应的请求头,最后通过axios发送post请求后端服务。后端服务同过MultipartFile进行文件接收。具体代码如下:
前端代码:
1、创建vue对象
importVuefrom'vue'
importAppfrom'./App.vue'
importrouterfrom'./router'
importstorefrom'./store'
importhttpfrom'axios'
Vue.config.productionTip=false;
Vue.prototype.$http=http;
window.vm=newVue({
router,
store,
render:h=>h(App)
}).$mount('#app')
2、实现上传组件
在input标签中添加改变事件监听,当发生改变时调用up方法。
后端代码:
上传文件代码
@RequestMapping(value="/up",method=RequestMethod.POST) @ResponseBody publicResultuploade(@RequestParam("file")MultipartFilefile){ try{ log.error("开始上传!!!"); StringoriginalFilename=file.getOriginalFilename(); InputStreaminputStream=file.getInputStream(); Stringpath="d:/2020test/"; Filefile1=newFile(path+originalFilename); if(!file1.getParentFile().exists()){ file1.getParentFile().mkdirs(); } file.transferTo(file1); log.info("上传成功!"); }catch(IOExceptione){ e.printStackTrace(); } Result stringResult=newResult (); stringResult.setMsg("sue"); stringResult.setData("file"); returnstringResult; }
二、文件下载
通过response输出流返回文件内容,核心代码设置下载文件的名字(res.setHeader(“Content-Disposition”,“attachment;filename=”+java.net.URLEncoder.encode(realFileName.trim(),“UTF-8”));)
@RequestMapping(value="/get",method=RequestMethod.GET)
publicvoiddownloadFile(HttpServletResponseres){
StringrealFileName="C:/Users/xiongyi/Desktop/12.xls";
FileexcelFile=newFile(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(UnsupportedEncodingExceptione1){
e1.printStackTrace();
}
byte[]buff=newbyte[1024];
BufferedInputStreambis=null;
OutputStreamos=null;
try{
os=res.getOutputStream();
bis=newBufferedInputStream(newFileInputStream(newFile(realFileName)));
inti=bis.read(buff);
while(i!=-1){
os.write(buff,0,buff.length);
os.flush();
i=bis.read(buff);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(bis!=null){
try{
bis.close();
}catch(IOExceptione){
}
}
}
ResultstringResult=newResult();
stringResult.setMsg("sue");
stringResult.setData("nimabi");
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。