如何实现文件上传 - JavaWeb
直接上代码 ( 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);
} /**
* 文件上传配置
*/
@Bean
public MultipartConfigElement multipartConfigElement(){
MultipartConfigFactory factory = new MultipartConfigFactory();
//maxSize
factory.setMaxFileSize("10240KB");
//设置总上传数据总大小
factory.setMaxRequestSize("102400KB");
return factory.createMultipartConfig();
}
}
如何实现文件上传 - JavaWeb的更多相关文章
- .JavaWeb文件上传和FileUpload组件使用
.JavaWeb文件上传 1.自定义上传 文件上传时的表单设计要符合文件提交的方式: 1.提交方式:post 2.表单中有文件上传的表单项:<input type="file" ...
- (转载)JavaWeb学习总结(五十)——文件上传和下载
源地址:http://www.cnblogs.com/xdp-gacl/p/4200090.html 在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传 ...
- JavaWeb:实现文件上传
JavaWeb:实现文件上传 理解文件上传: 1.上传文件就是把客户端的文件发送给服务器端. 2.HTTP响应的正文部分最常见的是HTML文档,但是也可以是其他任意格式的数据,如图片和声音文件中的数据 ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb实现文件上传下载功能实例解析
转:http://www.cnblogs.com/xdp-gacl/p/4200090.html JavaWeb实现文件上传下载功能实例解析 在Web应用系统开发中,文件上传和下载功能是非常常用的功能 ...
- JavaWeb——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- JavaWeb项目实现文件上传动态显示进度
很久没有更新博客了,这段时间实在的忙的不可开交,项目马上就要上线了,要修补的东西太多了.当我在学习JavaWeb文件上传的时候,我就一直有一个疑问,网站上那些博客的图片是怎么上传的,因为当提交了表单之 ...
- JavaWeb 文件 上传 下载
文件上传下载对于一个网站来说,重要性不言而喻.今天来分享一个JavaWeb方式实现的文件上传下载的小例子. 项目依赖 项目目录 工作流程 文件上传 表单处的设置 服务器端 上传功能的实现 upload ...
随机推荐
- 嵌入式Linux学习路线
最近比较忙,对于嵌入式的相关学习一直没有很好的开展.今天也看了不少的嵌入式Linux的学习路线,也和几个工作过的朋友聊了聊,想把之后的学习过程记录下来. 自己以后想从事驱动开发这方面的工作,因为大多数 ...
- noip2018游(AFO)记
Day 0 到学车了,已经差不多四点了,领完一小袋比赛要用的就匆匆回了宾馆. 话说之前看地图的时候我们的宾馆最远,而且名字听起来并没有怎么高大上, 一看隔壁度豪大酒店就感觉应该比我们的酒店好.然鹅到了 ...
- 利用android studio 生成 JNI需要的动态库so文件
JNI: Java Native Interface, 提供了java语言和其他语言(例如c和c++)进行相互调用的方式. 本文是用java调用c生成的so模式.其中,编译so文件过程如下: 1) ...
- 帆软报表(finereport)决策平台笔记(持续更新)
1,报表发布的流程制作报表>>>报表部署>>>WEB页面集成>>>权限配置 2,报表部署到Tomcat的简单介绍A,独立部署将WebReport文 ...
- XPath Helper使用教程
下载地址 百度网盘下载密码:yuuv下载完成后选择保留 安装 在导航栏中输入chrome://extensions:将.crx文件拖拽到扩展程序页面中,勾选已启用按钮. 使用 重启浏览器,快捷键CTR ...
- ebe2
Email:kefu007@vip.qq.com 软件每天有更新.请用Ctrl+F键搜索您需要的软件..如果你找不到你需要的软件可以联系客户服务人员帮您找! 海拉之光LucidShape光学设计仿真分 ...
- LoadRunner监控数据库服务
一.LR监控SQL Server SQL Server自身提供的性能计数器指标有: 指标名称 指标描述 指标范围 指标单位 1.SQL Server中访问方法(Access Methods)对象包含的 ...
- openpyxl使用sheet.rows或sheet.columns报TypeError: 'generator' object is not subscriptable解决方式
解决方案: 因为新版本的openpyxl使用rows或者columns返回一个生成器所以可以使用List来解决报错问题 >>> sheet.columns[0] Traceback ...
- 设计模式 — 抽象工厂模式(Abstract Factory)
工厂模式已经分析了简单工厂模式和工厂方法模式.并且了解了工厂方法模式去简单工厂模式的延伸,工厂方法模式如果不把工厂类抽象的话,就是简单工厂模式.由前面两个工厂模式可以猜测出抽象工厂模式应该是这两种工厂 ...
- iOS开发之常用路径及文件操作方法
一.常用的路径方法 1.获取AppName.app 目录路径: NSString *path = [[NSBundle mainBundle] bundlePath]; 2.获取Documents目录 ...