java,单文件和多文件上传代码范例
上传一个单文件,用request.getFile得到文件(下面的功能是上传到阿里云)
@RequestMapping(value = {"/content"}, method = RequestMethod.POST, headers = "content-type=multipart/form-data")
public String content(ModelMap modelMap,
MultipartHttpServletRequest request,
HttpServletResponse response){
response.setHeader("Access-Control-Allow-Origin", "*");
OSSUpload ossUpload = new OSSUpload("xinmeiti");
Iterator<String> itr = request.getFileNames();
MultipartFile file = request.getFile(itr.next());
Map<String, Object> map = new HashMap<>();
try{
byte[] bytes = org.apache.poi.util.IOUtils.toByteArray(file.getInputStream());
String fileType = getImageType(bytes);
String md5 = StringUtils.md5(String.valueOf(bytes));
String fileName = firstName +"/"+md5 + "."+ fileType;
Map<String, Object> uploadResult = ossUpload.upload(bytes, fileName);
if(!uploadResult.get("status").equals(0)){
modelMap.addAttribute("json", StringUtils.toJson(uploadResult));
}else{
map.put("url", cndName+fileName);
modelMap.addAttribute("json", StringUtils.toJson(map));
}
} catch (IOException e) {
modelMap.addAttribute("json", StringUtils.toJson(new ReturnMap(10004, "上传图片失败")));
e.printStackTrace();
}
return "mis/json";
}
上传多个文件,用request.getFile得到多文件
@RequestMapping(value = {"multipleFileUpload"}, method = {RequestMethod.GET, RequestMethod.POST})
public String multipleFileUpload(
ModelMap modelMap,
MultipartHttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = "type") String type,
@RequestParam(value = "jobId") String jobId) throws IOException {
List < MultipartFile > files = request.getFiles("files");
response.setHeader("Access-Control-Allow-Origin", "http://www.gifmiao.com");
Map<String, Object> statusMap = new HashMap<>();
HttpSession session = request.getSession();
session.setAttribute("gifCompressStatus", statusMap);
int compressSize = getCompressSizeByValue(type);
for(MultipartFile file :files){
String filename = file.getOriginalFilename().split(".gif")[0];
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("size" , 0);
resultMap.put("status" , 0);
resultMap.put("url" , "");
statusMap.put(filename, resultMap);
InputStream is = file.getInputStream();
byte[] bytes = IOUtils.toByteArray(is);
CompressWorker worker = new CompressWorker(statusMap, bytes, filename, compressSize, jobId);
worker.start();
}
modelMap.addAttribute("json", StringUtils.toInsensitiveJson(new ReturnMap("线程已启动")));
return "json";
}
在使用MultipartHttpServletRequest类型的时候需要注意,随便什么request都是MultipartHttpServletRequest
在这里举两个可以用MultipartHttpServletRequest的例子。
后端代码:上传一个单文件
@RequestMapping(value = "/uploadInsight", method = RequestMethod.POST)
public String uploadInsight(ModelMap modelMap,
MultipartHttpServletRequest request,
@RequestParam(value = "category") String category,
@RequestParam(value = "title") String title,
) throws IOException{
Iterator<String> itr = request.getFileNames();
MultipartFile file = request.getFile(itr.next());
Map<String, Object> map = uploadImage(file);
if(!map.get("state").equals("SUCCESS")){
modelMap.addAttribute("json", StringUtils.toJson(new ReturnMap(10004, "上传图片失败")));
return "mis/json";
}
String fengmianImgUrl = (String) map.get("name");
InsightModel insightModel = new InsightModel();
insightModel.setCategory(category);
insightModel.setThumbnail(fengmianImgUrl);
insightModel.setTitle(title);
datastore.save(insightModel);
modelMap.addAttribute("json", StringUtils.toJson((new ReturnMap("OK"))));
return "mis/json";
}
对应的前端代码可以是这样:(原生的js)
function upload(user){ //user是从表单里面接到的数据
var formData = new FormData();
formData.append("title", user.title);
formData.append("file", user.file);
formData.append("category", user.category);
var xhr = new XMLHttpRequest();
xhr.open('POST', "/editor/uploadInsight");
//xhr.withCredentials = true; //这个是关于跨域证书的
xhr.onload = function(){
if(xhr.readyState == 4 && xhr.status == 200){
console.log("成功")
}
};
xhr.send(formData);
}
对应的前端代码也可以是这样:(jquery方式调用)
var formData = new FormData();
formData.append("file", file);
formData.append("title", title);
formData.append("category", category); $.ajax({
type : "POST",
url : "/editor/uploadInsight",
data : formData,
processData : false,
contentType : false ,
file:file,
error: function(data) { },
success: function(data) { },
xhr: function() { }
});
java,单文件和多文件上传代码范例的更多相关文章
- git通过diff文件,合并未上传代码库代码
今天有段代码需要从别人的机器上同步到本地,但是这段代码还没上库,所以要么将这部分代码打包传过来,或者,用下面的办法. 由于代码修改涉及多个文件,打包搞过来确实比较麻烦,在网上找了下,发现可以用git ...
- 使用webstorm上传代码到github
使用webstorm上传代码到github 字数681 阅读330 评论0 喜欢5 之前使用过webstorm上传代码到github,过了几个月竟然发现自己忘记了,好记性不如烂笔头啊,今天又重新用了一 ...
- 初次使用git上传代码到github远程仓库
https://blog.csdn.net/loner_fang/article/details/80488385 2018年05月28日 21:02:31 蒲公英上的尘埃 阅读数:697 因为最近在 ...
- 使用git上传代码到github远程仓库
一.新建代码库注册好github登录后,首先先在网页上新建代码库. 点击右上角"+"→New repository 进入如下页面:按照要求填写完成后,点击按钮创建代码库创建成功. ...
- [html5+java]文件异步读取及上传核心代码
html5+java 文件异步读取及上传关键代码段 功能: 1.多文件文件拖拽上传,file input 多文件选择 2.html5 File Api 异步FormData,blob上传,图片显示 3 ...
- c# 模拟表单提交,post form 上传文件、大数据内容
表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- c# 模拟表单提交,post form 上传文件、数据内容
转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...
- SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html
SpringMVC上传压缩文件,解压文件,并检测上传文件中是否有index.html 说明: 1.环境:SpringMVC+Spring+Tomcat7+JDK1.7 2.支持 zip和rar格式的压 ...
随机推荐
- 【Git】 Git安装及配置
Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.而国外的GitHub和国内的Coding都是项目的托管平台. 本例使用环境:Linux环境(CentOS 7.4 ...
- Error:java: Compilation failed: internal java compiler
errorInformation:java: javacTask: 源发行版 1.8 需要目标发行版 1.8 解决此类问题 检查自己的JDK是否一致 1 setting--------built ...
- 【计算机视觉】OpenCV篇(6) - 平滑图像(卷积/滤波/模糊/降噪)
平滑滤波 平滑滤波是低频增强的空间域滤波技术.空间域滤波技术即不经由傅立叶转换,直接处理影像中的像素,它的目的有两类:一类是模糊:另一类是消除噪音.空间域的平滑滤波一般采用简单平均法进行,就是求邻近像 ...
- 将MySQL一张表的数据迁移到MongoDB数据库的Java代码示例
Java代码: package com.zifeiy.snowflake.handle.etl.mongodb; import java.sql.Connection; import java.sql ...
- STM32 MDK摘记
题记:这人是越懒越懒,记性也也来越差,前段时间改了个链接文件,今天想用,竟然忘了咋写....还是勤记记吧... 随时更新,笔记帖. 不喜勿喷! 1,关于MDK链接文件宏的定义 #! armcc -E ...
- clang, gcc, gdb
Clang 比 GCC 编译器的优势: 1 编译速度更快 2 编译产出更小 3 出错提示更友好,比如 clang 在编译过程可以直接指出相对简单的出错位置以及它 " 认为 " 正确 ...
- [转帖]Nginx Image Module图片缩略图 水印处理模块
Nginx Image Module图片缩略图 水印处理模块 https://www.cnblogs.com/jicki/p/5546972.html Nginx Image Module图片缩略图 ...
- Spring Boot 入门(九):集成Quartz定时任务
本片文章续<Spring Boot 入门(八):集成RabbitMQ消息队列>,关于Quartz定时任务请参考<Quartz的基本使用之入门(2.3.0版本)> spring ...
- CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可
CentOS下使用yum安装Apache极为方便,只需要在终端键入以下命令即可 1.安装Apache yum install httpd 2.设置服务器开机自动启动Apache systemctl e ...
- Python列表生成式测试
print('*'*50) list1 = list(range(1,6)) print(list1) del(list1) #range(1,20) 按顺序生成列表 list1 = [] for x ...