由于对高大上的前端处理不太熟悉,想直接通过mvc的方式进行内容传递,因此选用了thymeleaf模版处理向前端传值的问题。
application.properties文件
#访问超市时间的设置ribbon.connecttimeout=60000ribbon.readtimeout=60000# 开启多文件上传spring.servlet.multipart.enabled=true spring.servlet.multipart.file-size-threshold =0#单个文件大小#spring.http.multipart.maxfilesize=10mb#设置总上传的数据大小#spring.http.multipart.maxrequestsize=10mb#升级到2.0后需要改成#单个文件大小spring.servlet.multipart.max-file-size=10mb #设置总上传的数据大小 spring.servlet.multipart.max-request-size=10mb#上传路径upload_path=d:/file_statics#下载路径download_path=d:/file_statics
2.controller代码
import java.io.bufferedinputstream;import java.io.file;import java.io.fileinputstream;import java.io.ioexception;import java.io.outputstream;import java.nio.file.files;import java.nio.file.path;import java.nio.file.paths;import java.util.arrays;import java.util.list;import java.util.stream.collectors;import javax.servlet.http.httpservletresponse;import org.apache.commons.lang3.stringutils;import org.springframework.beans.factory.annotation.value;import org.springframework.web.bind.annotation.requestmapping;import org.springframework.web.bind.annotation.requestmethod;import org.springframework.web.bind.annotation.requestparam;import org.springframework.web.bind.annotation.responsebody;import org.springframework.web.bind.annotation.restcontroller;import org.springframework.web.multipart.multipartfile;import org.springframework.web.servlet.mvc.support.redirectattributes;import com.vinord.common.model.resultview;import com.vinord.common.util.constains;@restcontrollerpublic class fileuploadcontroller{ @value("${upload_path}") private final string upload_path ="d:/file_statics"; @value("${download_path}") private final string download_path ="d:/file_statics"; /** * 单个文件上传 * @param file * @param redirectattributes * @return */ @requestmapping("uploadfile") public resultview singlefileupload(@requestparam("file") multipartfile file,redirectattributes redirectattributes) { resultview result = new resultview(); if (file.isempty()) { redirectattributes.addflashattribute("message", "请选择文件进行上传"); result.setcode(constains.status_zero); result.setmsg("请选择文件进行上传!"); return result; } try { byte[] bytes = file.getbytes(); string filename = file.getoriginalfilename(); string name = filename.substring(0,filename.lastindexof(".")); string formatdate = system.currenttimemillis()+""; int index = filename.indexof("."); string savefilename = name + formatdate+ filename.substring(index); path path = paths.get(upload_path+ file.separator+savefilename); files.write(path, bytes); redirectattributes.addflashattribute("message","成功上传文件: '" + file.getoriginalfilename() + "'"); result.setcode(constains.status_one); result.setmsg("上传成功"); } catch (ioexception e) { e.printstacktrace(); } return result; } /** * 多个文件上传 * @param files * @return */ @responsebody @requestmapping(value = "/upload/batch", method = requestmethod.post) public resultview batchupload(@requestparam("files")multipartfile[] files) { resultview result = new resultview(); string uploadedfilename = arrays.stream(files).map(x -> x.getoriginalfilename()) .filter(x -> !stringutils.isempty(x)).collect(collectors.joining(" , ")); if (stringutils.isempty(uploadedfilename)) { result.setcode(constains.status_zero); result.setmsg("文件上传失败,文件为空!"); return result; } try { saveuploadedfiles(arrays.aslist(files)); } catch (ioexception e) { result.setcode(constains.status_zero); result.setmsg("文件上传异常"+e.getmessage()); return result; } result.setcode(constains.status_one); result.setmsg("上传成功"); return result; } private void saveuploadedfiles(list<multipartfile> files) throws ioexception { for (multipartfile file : files) { if (file.isempty()) { continue; } byte[] bytes = file.getbytes(); string filename = file.getoriginalfilename(); string name = filename.substring(0,filename.lastindexof(".")); string formatdate = system.currenttimemillis()+""; int index = filename.indexof("."); string savefilename = name + formatdate+ filename.substring(index); path path = paths.get(upload_path+ file.separator+ savefilename); files.write(path, bytes); } } /** * 下载 * @param res * @throws ioexception */ @requestmapping("download") public void download(httpservletresponse res) throws ioexception { string filename = "customlogcontrol1536898060373.java"; res.setheader("content-type", "application/octet-stream"); res.setcontenttype("application/octet-stream"); res.setheader("content-disposition", "attachment;filename=" + filename); byte[] buff = new byte[1024]; bufferedinputstream bis = null; outputstream os = null; try { os = res.getoutputstream(); bis = new bufferedinputstream(new fileinputstream(new file(download_path+ file.separator+filename))); 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) { e.printstacktrace(); } } } }}
相关推荐:
springboot+thymeleaf实现html文件引入(类似include功能)_html/css_web-itnose
优雅的使用mybatis
以上就是如何使springboot上传文件的详细内容。