直接上代码 ( idea 开发,SpringBoot 框架 ):

首先是Controller的写法:

package com.xxx.Controller;import com.xxx.Tools.ImgTool;
import com.xxx.bean.Msg;
import org.apache.tomcat.util.http.fileupload.FileUploadBase;
import org.apache.tomcat.util.http.fileupload.FileUploadBase.*;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;@RestController
@RequestMapping(value = "/img")
public class ImgUploadController {@PostMapping(value = "/upload")public Msg uploadImg(@RequestParam(value = "img") MultipartFile img, HttpServletRequest request) throws IOException, FileSizeLimitExceededException {if (img == null){return Msg.fail().add("describe", "参数不能为空");} else {try {Map<String , Object> map = new HashMap<>();map = ImgTool.upload(img, request);if (map.get("resultStr").equals("300")){return Msg.fail().add("describe", "文件格式不支持");} else {return Msg.success().add("imgurl", map.get("resultStr"));}} catch (Exception e){return Msg.fail().add("describe", e);}}}
}

upload()函数所在的类,包含一些其他的tool方法 :

package com.xxx.Tools;import com.xxx.bean.Picture;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;public class ImgTool {/*** 上传图片,并返回图片路径*/public static Map<String, Object> upload(MultipartFile file, HttpServletRequest request) throws IOException {Map<String, Object> map = new HashMap<>();//过滤合法的文件类型String fileName = file.getOriginalFilename();String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);String allowSuffixs = "gif,jpg,jpeg,bmp,png,ico";if (allowSuffixs.indexOf(suffix) == -1){//300代表文件格式不支持map.put("resultStr", "300");System.out.println("文件格式不支持");return map;}//获取真实路径String localPath = request.getServletContext().getRealPath("/");//创建新目录String uri = File.separator + getNowDateStr(File.separator);File dir = new File(localPath + "/static/ProjectImgs/" + uri);if (!dir.exists()){dir.mkdirs();}//创建新文件String newFileName = getUniqueFileName();File f = new File(dir.getPath() + File.separator + newFileName + "." + suffix);//将输入流中的数据复制到新文件
        org.apache.commons.io.FileUtils.copyInputStreamToFile(file.getInputStream(), f);//创建picture对象Picture pic = new Picture();pic.setLocalPath(f.getAbsolutePath());pic.setName(f.getName());//将路径中的\\替换成/,符合浏览器的分级规则pic.setUrl(localPath.replace("\\", "/")+ "static/ProjectImgs"+ uri.replace("\\", "/") + "/" + newFileName + "." + suffix);//插入到数据库//...
map.put("resultStr", pic.getUrl());return map;}/*** 获取当前日期字符串* @param separator* @return*/public static String getNowDateStr(String separator){Calendar now = Calendar.getInstance();int year = now.get(Calendar.YEAR);//month 记得加一(因为默认从0开始计数)int month = now.get(Calendar.MONTH)+1;int day = now.get(Calendar.DATE);return year + separator + month + separator + day;}//生成唯一的文件名public static String getUniqueFileName(){String str = UUID.randomUUID().toString();return str.replace("-", "");}
}

Picture类:

package com.xxx.bean;import java.util.Date;public class Picture {private String localPath;private String name;private String url;private Date addTime;public Picture() {}public Picture(String localPath, String name, String url, Date addTime) {this.localPath = localPath;this.name = name;this.url = url;this.addTime = addTime;}public String getLocalPath() {return localPath;}public void setLocalPath(String localPath) {this.localPath = localPath;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getUrl() {return url;}public void setUrl(String url) {this.url = url;}public Date getAddTime() {return addTime;}public void setAddTime(Date addTime) {this.addTime = addTime;}
}

在通常的Web开发中,上面的通用写法只要稍加改动边可以适应自己的项目需求,比如在SSM框架中需要在dispatchServlet.xml中设置上传文件的各种限制;

SpringBoot中可以在.yml文件中配置文件路径,在项目起始的Application类中配置文件大小属性。

下面是SpringBoot中配置文件大小的参考写法,写在类ShouguoApplication,即入口程序段中:

package com.xxx;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import javax.servlet.MultipartConfigElement;@SpringBootApplication
public class ShouguoApplication {public static void main(String[] args) {SpringApplication.run(ShouguoApplication.class, args);}/*** 文件上传配置*/@Beanpublic MultipartConfigElement multipartConfigElement(){MultipartConfigFactory factory = new MultipartConfigFactory();//maxSizefactory.setMaxFileSize("10240KB");//设置总上传数据总大小factory.setMaxRequestSize("102400KB");return factory.createMultipartConfig();}
}

 

转载于:https://www.cnblogs.com/zishu/p/8982248.html

如何实现文件上传 - JavaWeb相关推荐

  1. JavaWeb实现文件上传下载功能实例解析

    转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...

  2. JavaWeb学习总结(五十)——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  3. tomcat temp 大量 upload 文件_问题:JavaWeb中实现文件上传的方式有哪些?

    问题:JavaWeb中实现文件上传的方式有哪些? 上回我们说了下文件下载的方式有哪些,这次我们从不同的环境下简单来说说文件上传的方式有哪些. 文件上传的方式 Servlet2.5 方式 Servlet ...

  4. JavaWeb:实现文件上传与下载

    JavaWeb:实现文件上传与下载 文件上传前端处理 本模块使用到的前端Ajax库为Axio,其地址为GitHub官网. 关于文件上传 上传文件就是把客户端的文件发送给服务器端. 在常见情况(不包含文 ...

  5. 77.【JavaWeb文件上传和邮件发送04】

    JavaWeb (二十五).文件上传 1.准备工作 2.实用类介绍 3.思维导图: 4.正戏开始 5.完整代码 (二十六).邮箱发送 1.邮箱发送的原理: 2.服务器的原理 3.下载两个jar包 4. ...

  6. Javaweb之文件上传与下载

    Javaweb之文件上传与下载 1. 文件上传下载概述 1.1. 什么是文件上传下载 所谓文件上传下载就是将本地文件上传到服务器端,从服务器端下载文件到本地的过程.例如目前网站需要上传头像.上传下载图 ...

  7. JavaWeb学习总结——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  8. JavaWeb 文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  9. JavaWeb富文本编辑器与文件上传

    目录 一.富文本编辑器 1.下载富文本编辑器 2.富文本编辑器的应用 二.文件上传 文件上传必须要注意的规则: 文件上传案例 文件夹的访问 一.富文本编辑器 富文本编辑器在项目中很常见,它可以将文本, ...

最新文章

  1. 140万!香港大学设高额博士奖学金
  2. 用记事本解决js中文乱码问题
  3. Makefile选项CFLAGS LDFLAGS LIBS
  4. input数字开头不能为0_李商隐为初恋写诗,每句以数字开头,最后10字一直被仿从未被超越...
  5. 指尖上的艺术——如何运用代码发挥无限创意
  6. android studio安装教程完整,Android Studio 安装配置方法完整教程【小白秒懂】
  7. OJ1029: 三角形判定
  8. day14(xml 编写及解析)
  9. Bootstrap3 模态对话框的事件
  10. 委托、事件--委托介绍篇
  11. 利用nat123进行内网穿透
  12. mysql网吧管理系统_网吧收银系统 网吧的收费管理系统 - 下载 - 搜珍网
  13. 路由协议常见FAQ-V1.1
  14. 使用augpush实现微信内跳转浏览器下载APP(包括apk和ios)的解决方案
  15. Python函数初始
  16. 王刚日记:好软文是什么样子的?
  17. Gradle | Gradle构建之Groovy语言基础
  18. 关于真空荧光显示屏的·学习记录
  19. Linux使用Java将C++程序发布为webservice(wsdl)
  20. fuzzy c-means 与 k-means实验对比

热门文章

  1. 比较nio大体上优于io的方面
  2. BZOJ5249:[九省联考2018]IIIDX——题解
  3. Notification Swift 3 0
  4. GCC依赖库顺序问题
  5. ListView使用BaseAdapter与ListView的优化
  6. 转贴一篇不错的Python入门教程 - Instant Hacking[译文]
  7. クリムゾンガールズ 汉化补丁(BUG修正)
  8. Vista开发兼容性概述
  9. 如果不是心中还有梦,又能忍住多少痛?
  10. mysql 分段执行_19个MySQL优化技巧,索引优化这样做最有效!