【收集】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 ...
随机推荐
- [Android UI] Shape详解 (GradientDrawable)
转载自:http://blog.csdn.net/feng88724/article/details/6398193 在Android开发过程中,经常需要改变控件的默认样式, 那么通常会使用多个图片来 ...
- GLSL的qualifier
uniform:从应用程序到vertex shader 到fragment shader都能使用,但是值一直不变: varying:从vertex shader到fragment shader,在fr ...
- Mybatis if判断的坑
具体情况参考这两篇文章: http://cheng-xinwei.iteye.com/blog/2008200 http://www.cnblogs.com/tv151579/p/3297691.ht ...
- telnet 测试端口是否打开
[root@mysqld ~]# yum list |grep telnet telnet.x86_64 1:0.17-48.el6 @base telnet-server.x86_64 1:0.17 ...
- 查看CPU是否支持虚拟化
参考:http://www.cnblogs.com/jankie/archive/2012/07/04/2575695.html 一.Windows平台:使用cpu-Z即可查看. 二.Linux平台: ...
- ***PHP中empty()和isset()的区别
对于初学php的人来说,empty()和和isset()用法的区别是很难搞清楚的,他们的用法的差别不仔细去琢磨的话确实很难弄清楚. 先说一下他们的共同点: 都可以判定一个变量是否为空: 都返回bool ...
- Oracle多个服务各代表什么作用(转)
在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动.在Oracle 运行在Windows 下时,它会消耗很多资源,并且有些服务可能我们 ...
- Hark的数据结构与算法练习之圈排序
算法说明 圈排序是选择排序的一种.其实感觉和快排有一点点像,但根本不同之处就是丫的移动的是当前数字,而不像快排一样移动的是其它数字.根据比较移动到不需要移动时,就代表一圈结束.最终要进行n-1圈的比较 ...
- Windows自带Android模拟器启动失败
Windows自带Android模拟器启动失败 错误信息:[Critical] XDE Exit Code: InvalidArguments (3)XDE执行的第三个参数为设置内存值,形式为/mem ...
- Xamarin如何生成Android项目的APK
Xamarin如何生成Android项目的APK 首先需要选择Release模式生成项目.然后从“生成”菜单中选择Export Android Package命令,就可以导出APK包.APK保存在An ...