原文: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的更多相关文章

  1. 《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  2. 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)

    1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...

  3. Python接口自动化——文件上传/下载接口

    〇.前言 文件上传/下载接口与普通接口类似,但是有细微的区别. 如果需要发送文件到服务器,例如:上传文档.图片.视频等,就需要发送二进制数据,上传文件一般使用的都是 Content-Type: mul ...

  4. BootStrap fileinput.js文件上传组件实例代码

    1.首先我们下载好fileinput插件引入插件 ? 1 2 3 <span style="font-size:14px;"><link type="t ...

  5. JavaScrip 原生多文件上传及预览 兼容多浏览器

    JavaScrip 原生多文件上传及预览 兼容多浏览器 html代码块 <div class="container"> <label>请选择一个图像文件:& ...

  6. Java使用HttpURLConnection上传文件

    从普通Web页面上传文件非常easy.仅仅须要在form标签叫上enctype="multipart/form-data"就可以,剩余工作便都交给浏览器去完毕数据收集并发送Http ...

  7. java实用技能 上传文件 等等

    1.IOS  AES对称加密,加密结果不同,问题解决 IOS http post请求,使用AFNetworing 框架,默认请求content-type为application/json ,所以无法使 ...

  8. Java使用HttpURLConnection上传文件(转)

    从普通Web页面上传文件很简单,只需要在form标签叫上enctype="multipart/form-data"即可,剩余工作便都交给浏览器去完成数据收集并发送Http请求.但是 ...

  9. java模拟浏览器上传文件

    public static void main(String[] args) { String str = uploadFile("C:/Users/RGKY/Desktop/wKgBHVb ...

随机推荐

  1. Excel VBA Dir

    内容来自ExcelHome网站 一.题目: 要求编写一段代码,运用Dir函数返回一个文件夹的文件列表.二.代码:Sub 示例_1_12()        Dim wjm        wjm = Di ...

  2. osgEarth例子

    #include <osgViewer/Viewer>#include <osgViewer/ViewerEventHandlers>#include <osgGA/St ...

  3. [SVN(ubuntu)] svn 文件状态标记含义

    A item 文件.目录或是符号链item预定加入到版本库. C item 文件item发生冲突,在从服务器更新时与本地版本发生交迭,在你提交到版本库前,必须手工的解决冲突. D item 文件.目录 ...

  4. Android涉及到的设计模式

    转载地址:http://blog.csdn.net/dengshengjin2234/article/details/8502097 1.适配器模式:ListView或GridView的Adapter ...

  5. 取余运算(codevs 1497)

    题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k为长整型数(2^31范围内). 输入描述 Input Description b p k 输出描 ...

  6. MVC增删改查例子

    一.显示用户列表1.新建UserInfoController控制器 public ActionResult Index() { DataTable table = SQLHelper.ExecuteR ...

  7. 或许您还不知道的八款Android开源游戏引擎

    很多初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于iPhone下有诸如Cocos2d-iphone之类的免费游戏 ...

  8. svn 创建

    1.ps aux | grep svn 杀掉进程 2.svnadmin create /svnrepertory/SVNwangping 创建svn仓库; 3.修改3个文件 4.svnserve -d ...

  9. Chromium Embedded Framework 中文文档(简介)

    转自:http://www.cnblogs.com/think/archive/2011/10/06/CEF-Introduce.html 简介 Chromium Embedded Framework ...

  10. 怎么在手机上查看sqlite db

    在 从 百度应用 下载“SQLite编辑器(SQLite Editor)” 安装到手机上.前体是 手机已经Root(可以用360一键Root软件进行root).