详解SpringBoot下文件上传与下载的实现
SpringBoot后台如何实现文件上传下载?
最近做的一个项目涉及到文件上传与下载。前端上传采用百度webUploader插件。有关该插件的使用方法还在研究中,日后整理再记录。本文主要介绍SpringBoot后台对文件上传与下载的处理。
单文件上传
/单文件上传
@RequestMapping(value="/upload")
@ResponseBody
publicStringupload(@RequestParam("file")MultipartFilefile){
try{
if(file.isEmpty()){
return"文件为空";
}
//获取文件名
StringfileName=file.getOriginalFilename();
logger.info("上传的文件名为:"+fileName);
//获取文件的后缀名
StringsuffixName=fileName.substring(fileName.lastIndexOf("."));
logger.info("文件的后缀名为:"+suffixName);
//设置文件存储路径
StringfilePath="D://aim//";
Stringpath=filePath+fileName+suffixName;
Filedest=newFile(path);
//检测是否存在目录
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdirs();//新建文件夹
}
file.transferTo(dest);//文件写入
return"上传成功";
}catch(IllegalStateExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
return"上传失败";
}
如果想要修改文件路径及文件名,修改filePath以及fileName即可。
多文件上传
/多文件上传
@RequestMapping(value="/uploadMore",method=RequestMethod.POST)
@ResponseBody
publicStringhandleFileUpload(HttpServletRequestrequest){
Listfiles=((MultipartHttpServletRequest)request).getFiles("file");
MultipartFilefile=null;
BufferedOutputStreamstream=null;
for(inti=0;i"
+e.getMessage();
}
}else{
return"第"+i
+"个文件上传失败因为文件为空";
}
}
return"上传成功";
}
文件下载
//文件下载相关代码
@RequestMapping("/download")
publicStringdownloadFile(HttpServletRequestrequest,HttpServletResponseresponse){
StringfileName="aim_test.txt";//设置文件名,根据业务需要替换成要下载的文件名
if(fileName!=null){
//设置文件路径
StringrealPath="D://aim//"
Filefile=newFile(realPath,fileName);
if(file.exists()){
response.setContentType("application/force-download");//设置强制下载不打开
response.addHeader("Content-Disposition","attachment;fileName="+fileName);//设置文件名
byte[]buffer=newbyte[1024];
FileInputStreamfis=null;
BufferedInputStreambis=null;
try{
fis=newFileInputStream(file);
bis=newBufferedInputStream(fis);
OutputStreamos=response.getOutputStream();
inti=bis.read(buffer);
while(i!=-1){
os.write(buffer,0,i);
i=bis.read(buffer);
}
System.out.println("success");
}catch(Exceptione){
e.printStackTrace();
}finally{
if(bis!=null){
try{
bis.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
if(fis!=null){
try{
fis.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
}
returnnull;
}
MultipartConfig配置
可以通过MultipartConfig配置类对文件上传进行全局控制。
@Configuration
publicclassMultipartConfig{
@Bean
publicMultipartConfigElementmultipartConfigElement(){
MultipartConfigFactoryfactory=newMultipartConfigFactory();
//置文件大小限制,超出此大小页面会抛出异常信息
factory.setMaxFileSize("2MB");//KB,MB
//设置总上传数据总大小
factory.setMaxRequestSize("20MB");
//设置文件临时文件夹路径
//factory.setLocation("E://test//");
//如果文件大于这个值,将以文件的形式存储,如果小于这个值文件将存储在内存中,默认为0
//factory.setMaxRequestSize(0);
returnfactory.createMultipartConfig();
}
}
注意事项
前后端文件传输格式应为multipart/form-data
以上所述是小编给大家介绍的SpringBoot下文件上传与下载的实现详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!