如何实现文件上传 - 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 ...
随机推荐
- cocos2dx-lua调用C++
文参考:https://www.cnblogs.com/xiaonanxia/p/4987856.html 上面的文章是IOS版教程,用4部分说明原理,1部分说操作步骤. 这里用window VS20 ...
- java - day006 - 构造方法
构造方法 新建对象是,执行的一个特殊方法 new 类名(); 这个小括号就是构造方法 Java 类中,必须有构造方法,如果自己不定义, 编译器会自动生成默认构造方法 new 关键字是新建对象用的, ...
- STM32L1 串口相应驱动开发
初始化设置: GPIO_InitTypeDef GPIO_InitStructure; NVIC_InitTypeDef NVIC_InitStructure; USART_InitTypeDef U ...
- 关于javascript闭包(Closure)和return之间的暧昧关系
什么是闭包?阮一峰老师说的很清楚了,定义在一个函数内部的函数,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁. 首先要了解Javascript的变量作用域:全局变量和局部变量.全局嘛,就是共 ...
- php 数组写入文件
$fiele = '../data/conf/watermark.php';//指定要写入的文件 $param = $this->request->param(); $watermark ...
- Dapper+SqlServerCe部署
C:\Program Files\Microsoft SQL Server Compact Edition\v4.0 目录下面 选择下面这 7 个 SQL Server Compact DLL,并复制 ...
- swagger出现no response from server错误的解决办法
解决办法:1.启用80端口2.如果不是使用的80端口,是用的nginx做了映射的其他端口的话可以用Springfox swagger-ui 覆盖默认request host,加上这个在spring的应 ...
- PHP使用urlencode对中文编码时空格、加号的问题
使用urlencode这个函数进行格式化,urlencode函数会把空格编码为为:+ 当然,前端在接收时可以解码后进行替换 + 为空格的方式处理. 但是这样就多做了一步,很麻烦,有的时候我们的数据接口 ...
- thinkphp5简单使用redis缓存
<?php namespace app\index\controller; use think\Controller; use think\Cache\Driver\Redis; class I ...
- 聊聊HTML
HTML简述 What is HTML? HTML是用来描述网页的一种语言,全称超文本标记语言(HyperText Markup Language),它并不是一种编程语言,而是一种标记语言,即一套标记 ...