【收集】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 ...
随机推荐
- 【python】捕获所有异常
如下所示,在不知道异常名的情况下可以捕获所有异常 try: a=b b=c except Exception,ex: print Exception,":",ex
- [Android Pro] android Flag介绍
一些Flag的介绍 窗口之后的内容变暗. public static final int FLAG_DIM_BEHIND = 0x00000002; 窗口之后的内容变模糊. public ...
- CSS备忘
垂直居中: 先height再ling-height,都设成一样高 span 垂直居中:vertical-align:50%设置外边距: margin-top,m ...
- Jam的计数法(codevs 1140)
题目描述 Description Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用 ...
- Oracle 操作 - 配置
http://blog.csdn.net/flyingbox/article/details/1823231 http://blog.csdn.net/libingquan008/article/de ...
- Zookeeper笔记(四)Zookeeper在Dubbo中的应用
Zookeeper在Dubbo中的应用 Dubbo的架构 节点角色说明: Provider: 暴露服务的服务提供方.Consumer: 调用远程服务的服务消费方.Registry: 服务注册与发现的注 ...
- ***Redis hash是一个string类型的field和value的映射表.它的添加、删除操作都是O(1)(平均)。hash特别适合用于存储对象
http://redis.readthedocs.org/en/latest/hash/hset.html HSET HSET key field value (存一个对象的时候key存) 将哈希 ...
- arcgis android 通过getExtent得到当前地图范围四个点的坐标
困扰了我很久的问题终于要得到解决了,先欢喜一下.我的目的是想做一个当程序完全退出后,再次打开程序地图直接显示上次程序退出前地图的范围.arcgis for android官方软件就有这个功能.网上搜索 ...
- 向数据库中添加内容 manageStdInfo.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="manageStdInfo.as ...
- LightOJ1005 Rooks(DP/排列组合)
题目是在n*n的棋盘上放k个车使其不互相攻击的方案数. 首先可以明确的是n*n最多只能合法地放n个车,即每一行都指派一个列去放车. dp[i][j]表示棋盘前i行总共放了j个车的方案数 dp[0][0 ...