springboot实现文件上传和下载功能
springboot引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。
1.文件上传(前端页面):
Inserttitlehere 下载
表单提交加上enctype="multipart/form-data"很重要,文件以二进制流的形式传输。
2.文件上传(后端java代码)支持多文件
Way1.使用MultipartHttpServletRequest来处理上传请求,然后将接收到的文件以流的形式写入到服务器文件中:
@RequestMapping(value="/testUpload",method=RequestMethod.POST)
publicvoidtestUploadFile(HttpServletRequestreq,MultipartHttpServletRequestmultiReq)throwsIOException{
FileOutputStreamfos=newFileOutputStream(newFile("F://test//src//file//upload.jpg"));
FileInputStreamfs=(FileInputStream)multiReq.getFile("file").getInputStream();
byte[]buffer=newbyte[1024];
intlen=0;
while((len=fs.read(buffer))!=-1){
fos.write(buffer,0,len);
}
fos.close();
fs.close();
}
Way2.也可以这样来取得上传的file流:
//文件上传
@RequestMapping("/fileUpload")
publicMapfileUpload(@RequestParam("file")MultipartFilefile,HttpServletRequestreq){
Mapresult=newHashMap();
SimpleDateFormatdf=newSimpleDateFormat("yyyyMMdd");//设置日期格式
StringdateDir=df.format(newDate());//newDate()为获取当前系统时间
StringserviceName=UuidUtil.get32UUID()
+file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
FiletempFile=newFile(fileDir+dateDir+File.separator+serviceName);
if(!tempFile.getParentFile().exists()){
tempFile.getParentFile().mkdirs();
}
if(!file.isEmpty()){
try{
BufferedOutputStreamout=newBufferedOutputStream(newFileOutputStream(tempFile));
//"d:/"+file.getOriginalFilename()指定目录
out.write(file.getBytes());
out.flush();
out.close();
}catch(FileNotFoundExceptione){
e.printStackTrace();
result.put("msg","上传失败,"+e.getMessage());
result.put("state",false);
returnresult;
}catch(IOExceptione){
e.printStackTrace();
result.put("msg","上传失败,"+e.getMessage());
result.put("state",false);
returnresult;
}
result.put("msg","上传成功");
StringfileId=Get8uuid.generateShortUuid();
StringfileName=file.getOriginalFilename();
StringfileType=fileName.substring(fileName.lastIndexOf(".")+1);
StringfileUrl=webDir+dateDir+'/'+serviceName;
uploadMapper.saveFileInfo(fileId,serviceName,fileType,fileUrl);
result.put("state",true);
returnresult;
}else{
result.put("msg","上传失败,因为文件是空的");
result.put("state",false);
returnresult;
}
3.application.properties配置文件
#上传文件大小设置 multipart.maxFileSize=500Mb multipart.maxRequestSize=500Mb
4.文件下载将文件写到输出流里:
@RequestMapping(value="/testDownload",method=RequestMethod.GET)
publicvoidtestDownload(HttpServletResponseres)throwsIOException{
Filefile=newFile("C:/test.txt");
resp.setHeader("content-type","application/octet-stream");
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition","attachment;filename="+fileName);
byte[]buff=newbyte[1024];
BufferedInputStreambis=null;
OutputStreamos=null;
try{
os=resp.getOutputStream();
bis=newBufferedInputStream(newFileInputStream(file));
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){
e.printStackTrace();
}
}
}
}
5.获取文件大小
//文件大小转换
DecimalFormatdf1=newDecimalFormat("0.00");
StringfileSizeString="";
longfileSize=file.getSize();
if(fileSize<1024){
fileSizeString=df1.format((double)fileSize)+"B";
}elseif(fileSize<1048576){
fileSizeString=df1.format((double)fileSize/1024)+"K";
}elseif(fileSize<1073741824){
fileSizeString=df1.format((double)fileSize/1048576)+"M";
}else{
fileSizeString=df1.format((double)fileSize/1073741824)+"G";
}
如果是File类则fileSize=file.length()。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
热门推荐
10 诗词送行祝福语大全简短
11 新房开工吉日祝福语简短
12 50多岁生日简短祝福语
13 安徽疫情祝福语简短英语
14 农民朋友发财祝福语简短
15 对生活祝福语简短精辟
16 搬家词简短祝福语朋友
17 女神结婚快乐祝福语简短
18 文学短句祝福语大全简短