Spring boot 实现单个或批量文件上传功能
程序员文章站
2024-02-25 09:18:58
一:添加依赖:
or...
一:添加依赖:
<!-- thymeleaf模板插件 --> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-thymeleaf</artifactid> </dependency> <!-- jsp依赖 --> <dependency> <groupid>javax.servlet</groupid> <artifactid>jstl</artifactid> </dependency> <dependency> <groupid>org.apache.tomcat.embed</groupid> <artifactid>tomcat-embed-jasper</artifactid> <!--<scope>provided</scope>--> </dependency>
二:application.xml配置文件路径:
#配置上传文件地址 image.location.path=f:/image/ #配置文件大小限制 spring.http.multipart.maxfilesize=100mb spring.http.multipart.maxrequestsize=100mb #静态页面的访问配置 spring.thymeleaf.cache=false spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.check-template-location=true spring.thymeleaf.suffix=.html spring.thymeleaf.encoding=utf-8 spring.thymeleaf.content-type=text/html spring.thymeleaf.mode=html5
三:编写静态页面(src/main/resources下建文件夹static(static存放静态文件,比如 css、js、image…)和templates(存放静态页面)两个是同级目录),先在templates 中新建一个 uploadimg.html。
<!doctype html> <html> <head> <title>uploadimg.html</title> <meta name="keywords" content="keyword1,keyword2,keyword3"></meta> <meta name="description" content="this is my page"></meta> <meta name="content-type" content="text/html; charset=utf-8"></meta> <!--<link rel="stylesheet" type="text/css" href="./styles.css" rel="external nofollow" >--> </head> <body> <form enctype="multipart/form-data" method="post" action="/dc/fileupload"> 图片<input type="file" name="file"/> <input type="submit" value="上传"/> </form> </body> </html>
四:编写controller层:
package com.hot.analysis.controller.file; import java.io.bufferedinputstream; import java.io.file; import java.io.fileinputstream; import java.io.ioexception; import java.io.outputstream; import java.util.date; import java.util.random; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.beans.factory.annotation.value; import org.springframework.web.bind.annotation.postmapping; import org.springframework.web.bind.annotation.requestmapping; 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.modelandview; import com.hot.analysis.exception.myexception; @restcontroller public class fileuploadcontroller { //获取配置文件的路径 @value("${image.location.path}") private string resourcedir; /** * 实现文件上传 * */ @requestmapping(value = "/index") public modelandview toindex() { modelandview mv = new modelandview("uploadimg"); return mv; } //单个文件上传 @requestmapping("/dc/fileupload") @responsebody public string fileupload( multipartfile file){ // 获取上传文件路径 string uploadpath = file.getoriginalfilename(); // 获取上传文件的后缀 string filesuffix = uploadpath.substring(uploadpath.lastindexof(".") + 1, uploadpath.length()); if (filesuffix.equals("apk")) { uploadpath = resourcedir; } else { // 上传目录地址 // string uploadpath="e:/hot-manage/image/";//windows路径 uploadpath =resourcedir;// liux路劲 } // 上传文件名 string filename = new date().gettime() + new random().nextint(100) + "." + filesuffix; file savefile = new file(uploadpath + filename); if (!savefile.getparentfile().exists()) { savefile.getparentfile().mkdirs(); } try { file.transferto(savefile); } catch (illegalstateexception e) { e.printstacktrace(); } catch (ioexception e) { e.printstacktrace(); } if (filesuffix.equals("apk")) { return "/apk/" + filename; } else { return "/image/" + filename; } } // 批量上传 @postmapping("/dc/morefileupload") public string bacthfileupload(multipartfile[] file) throws myexception { stringbuffer buffer = new stringbuffer(); for (multipartfile multipartfile : file) { string str = fileupload(multipartfile); buffer.append(str); buffer.append(","); } string all = buffer.substring(0, buffer.length() - 1); return all; } // 删除文件 @postmapping("/dc/deletefile") public string delfile(string path) { string resultinfo = null; int lastindexof = path.lastindexof("/"); string sb = path.substring(lastindexof + 1, path.length()); sb = "f:/image/" + sb; file file = new file(sb); if (file.exists()) { if (file.delete()) { resultinfo = "1-删除成功"; } else { resultinfo = "0-删除失败"; } } else { resultinfo = "文件不存在!"; } return resultinfo; } //文件下载相关代码 @requestmapping("/download") public string downloadfile(httpservletrequest request, httpservletresponse response) { string filename = "aim_test.txt";// 设置文件名,根据业务需要替换成要下载的文件名 if (filename != null) { //设置文件路径 string realpath = "d://aim//"; file file = new file(realpath , filename); if (file.exists()) { response.setcontenttype("application/force-download");// 设置强制下载不打开 response.addheader("content-disposition", "attachment;filename=" + filename);// 设置文件名 byte[] buffer = new byte[1024]; fileinputstream fis = null; bufferedinputstream bis = null; try { fis = new fileinputstream(file); bis = new bufferedinputstream(fis); outputstream os = response.getoutputstream(); int i = bis.read(buffer); while (i != -1) { os.write(buffer, 0, i); i = bis.read(buffer); } system.out.println("success"); } catch (exception e) { e.printstacktrace(); } finally { if (bis != null) { try { bis.close(); } catch (ioexception e) { e.printstacktrace(); } } if (fis != null) { try { fis.close(); } catch (ioexception e) { e.printstacktrace(); } } } } } return null; } }
测试:
成功返回路径:
查看文件夹:
总结
以上所述是小编给大家介绍的spring boot 实现单个或批量文件上传功能,希望对大家有所帮助