【收集】JAVA多文件 上传文件接口代码 -兼容app
原文:http://www.verydemo.com/demo_c143_i23854.html
我们在 multifile 中可以很容易的发现如何使用,这里就简单说说了,首先在页面上我们需要有这样几行标签代码
<!-- 注意这里的attach名字为固定,如果要控制上传的格式,则追加accept="doc|txt|jsp" 最大上传量maxlength="3" -->
<input type="file" name="attach" id="multiFileId" class=" input_txt"/>
<div id="multiFileId-list"></div>
然后在该页面中引入相关的JS和CSS
<script src="./js/multifile/jquery.MetaData.js" type="text/javascript"></script>
<script src="./js/multifile/jquery.MultiFile.js" type="text/javascript"></script>
<script src="./js/multifile/jquery.blockUI.js" type="text/javascript"></script>
<script src="./js/multifile/documentation.js" type="text/javascript"></script>
<link href="./js/multifile/documentation.css" type="text/css" rel="stylesheet" />
然后通过js和设置刚刚写入的标签
<script type="text/javascript">
$(function() {
//加载多文件上传的JS
$('#multiFileId').MultiFile(
{
list : '#multiFileId-list',
STRING : {
remove : '<img src="http://www.fyneworks.com/i/bin.gif" height="16" width="16" alt="x"/>'
}
});
});
</script>
当然,上面的这段 JS 以及上面的 HTML 标签,我们可以根据实际的情况参考官网上的 Demo 上说明的属性进行设置。
Ok ,前台我们使用这个插件的地方基本就 ok 了,下面我们需要关心的是后台我们如何处理这里上传的多文件进行保存。在调研的过程中我将这一部分简单的写了一个工具类。
首先在 Controller 里接收
@RequestMapping(value="/uploadFile/upload.ac", method = RequestMethod.POST)
public String uploadFile(HttpServletRequest request,
HttpServletResponse response) {
List<MultipartFile> multipartFiles = UploadHelper.getFileSet(request, 1024 * 20, null);
String path = "D:" + File.separator;
if (multipartFiles.size() == 0) {
// TODO 给出提示,不允许没选择文件点击上传 }
for (MultipartFile multipartFile : multipartFiles) {
try {
String filePath = UploadHelper.uploadFile(multipartFile, path);
System.out.println(filePath);
} catch (Exception e) {
e.printStackTrace();
}
// 拿到的imgPath就是图片的相对于contextPath的存储路径了
}
return null;
}
UploadHelper.java
package org.elongcom.common; import java.io.File;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID; import javax.servlet.http.HttpServletRequest; import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; /**
* @author xdwang
*
* @create 2012-11-19 下午6:24:03
*
* @email:xdwangiflytek@gmail.com
*
* @description 上传帮助类
*
*/
public class UploadHelper { /**
* @descrption 根据HttpServletRequest对象获取MultipartFile集合
* @author xdwang
* @create 2012-11-19下午5:11:41
* @param request
* @param maxLength
* 文件最大限制
* @param allowExtName
* 不允许上传的文件扩展名
* @return MultipartFile集合
*/
public static List<MultipartFile> getFileSet(HttpServletRequest request,
long maxLength, String[] allowExtName) {
MultipartHttpServletRequest multipartRequest = null;
try {
multipartRequest = (MultipartHttpServletRequest) request;
} catch (Exception e) {
return new LinkedList<MultipartFile>();
} List<MultipartFile> files = new LinkedList<MultipartFile>();
files = multipartRequest.getFiles("attach");
// 移除不符合条件的
for (int i = 0; i < files.size(); i++) {
if (!validateFile(files.get(i), maxLength, allowExtName)) {
files.remove(files.get(i));
if (files.size() == 0) {
return files;
}
}
}
return files;
} /**
* @descrption 保存文件
* @author xdwang
* @create 2012-11-19下午4:17:36
* @param file
* MultipartFile对象
* @param path
* 保存路径,如“D:\\File\\”
* @return 保存的全路径 如“D:\\File\\2345678.txt”
* @throws Exception
* 文件保存失败
*/
public static String uploadFile(MultipartFile file, String path)
throws Exception { String filename = file.getOriginalFilename();
String extName = filename.substring(filename.lastIndexOf("."))
.toLowerCase();
String lastFileName = UUID.randomUUID().toString() + extName;
if (!path.endsWith(File.separator)) {
path = path + File.separator;
}
File temp = new File(path);
if (!temp.isDirectory()) {
temp.mkdir();
}
// 图片存储的全路径
String fileFullPath = path + lastFileName;
FileCopyUtils.copy(file.getBytes(), new File(fileFullPath));
return fileFullPath;
} /**
* @descrption 验证文件格式,这里主要验证后缀名
* @author xdwang
* @create 2012-11-19下午4:08:12
* @param file
* MultipartFile对象
* @param maxLength
* 文件最大限制
* @param allowExtName
* 不允许上传的文件扩展名
* @return 文件格式是否合法
*/
private static boolean validateFile(MultipartFile file, long maxLength,
String[] allowExtName) {
if (file.getSize() < 0 || file.getSize() > maxLength)
return false;
String filename = file.getOriginalFilename(); // 处理不选择文件点击上传时,也会有MultipartFile对象,在此进行过滤
if (filename == "") {
return false;
}
String extName = filename.substring(filename.lastIndexOf("."))
.toLowerCase();
if (allowExtName == null || allowExtName.length == 0
|| Arrays.binarySearch(allowExtName, extName) != -1) {
return true;
} else {
return false;
}
} }
这里需要多说一点的是,表单提交时如果有文件进行上传时,需要在表单上设置enctype="multipart/form-data",否则上面的 multipartRequest = (MultipartHttpServletRequest) request;进行强转时会报错
【收集】JAVA多文件 上传文件接口代码 -兼容app的更多相关文章
- 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- Python接口自动化——文件上传/下载接口
〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...
- BootStrap fileinput.js文件上传组件实例代码
1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...
- JavaScrip 原生多文件上传及预览 兼容多浏览器
JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...
- Java使用HttpURLConnection上传文件
从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...
- java实用技能 上传文件 等等
1.IOS AES对称加密,加密结果不同,问题解决 IOS http post请求,使用AFNetworing 框架,默认请求content-type为application/json ,所以无法使 ...
- Java使用HttpURLConnection上传文件(转)
从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...
- java模拟浏览器上传文件
public static void main(String[] args) { String str = uploadFile("C:/Users/RGKY/Desktop/wKgBHVb ...
随机推荐
- 【USACO】checker
一看题目 经典的8皇后问题 不过是皇后数量可变而已 不用想 回溯法. 需要个生成每次可选择序列的函数, 在存储可选择的序列时按照先大后小的顺序排的.这样每次找最小和去掉最小都很方便,只要有个记录数量的 ...
- ***PHP类型转换实例:$this->input->get()返回的结果是字符串类型(数字字符串转数字)
一个GET的REST API,请求有三个参数,且都是数字 用$this->input->get()方法获取后的结果是字符串,需要转换为数字:如果没有获取到数据,则会返回false,需要用e ...
- sdut 2411:Pixel density(第三届山东省省赛原题,字符串处理)
Pixel density Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Pixels per inch (PPI) or pi ...
- 在C# 6中实践模式匹配
模式匹配(Pattern Matching)是F#中非常好用的一种语言特性.估计很多人都希望在C#中能用到这样的特性. 一句话解释一下模式匹配就是:创建一个函数可以接受和处理不同类型的表达式(包括不同 ...
- 【练习】ViewPager标签滑动
效果图: 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:a ...
- 【shiro】一、基础概念
来源:http://blog.csdn.net/swingpyzf/article/details/46342023/ &&&& http://jinnianshilo ...
- servlet中cookie的使用
---恢复内容开始--- Cookie是存储在客户端计算机上的文本文件,并保留了它们的各种信息跟踪的目的. Java Servlet透明支持HTTP Cookie. 涉及标识返回用户有三个步骤: 服务 ...
- Hadoop_10_12虚拟机01_虚拟机NAT方式联网【自己的亲测笔记】
NAT方式 1.查看网络信息--ifconfig(同windows中的ipconfig相同) 主要关注的是第三行内容,分别是Ip地址.广播地址.子网掩码 2.安装完系统后需要配置三个地方--IP地 ...
- 简单几何(点与线段的位置) POJ 2318 TOYS && POJ 2398 Toy Storage
题目传送门 题意:POJ 2318 有一个长方形,用线段划分若干区域,给若干个点,问每个区域点的分布情况 分析:点和线段的位置判断可以用叉积判断.给的线段是排好序的,但是点是无序的,所以可以用二分优化 ...
- 最短路(Floyd_Warshall) POJ 2253 Frogger
题目传送门 /* 最短路:Floyd算法模板题 */ #include <cstdio> #include <iostream> #include <algorithm& ...