plupload批量上传分片功能,

对于文件比较大的情况下,plupload支持分片上传,后台代码如下:

    /**
*
* 方法:upLoadSpecialProgramPictrue
* 方法说明:本地节目导入
* @return
* @author wangHao
* @throws Exception
* @date 2015年6月9日
*/
@RequestMapping("/localUpLoadProgram")
@ResponseBody
public void localUpLoadProgram(
@RequestParam("file") CommonsMultipartFile[] file,
HttpServletResponse response,HttpServletRequest request) throws Exception { boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
String fileName = "";
Integer chunk = 0, chunks = 0; //检查文件目录,不存在则创建
String relativePath = "/plupload/files/";
String realPath = ConfigUtil.class.getResource("/").getPath();
File folder = new File(realPath + relativePath);
if (!folder.exists()) {
folder.mkdirs();
} DiskFileItemFactory diskFactory = new DiskFileItemFactory();
// threshold 极限、临界值,即硬盘缓存 1M
diskFactory.setSizeThreshold(4 * 1024); ServletFileUpload upload = new ServletFileUpload(diskFactory);
// 设置允许上传的最大文件大小(单位MB)
upload.setSizeMax(1024 * 1048576);
upload.setHeaderEncoding("UTF-8");
List<FileItem> fileList = new ArrayList<FileItem>();
fileList.add(file[0].getFileItem());
Iterator<FileItem> it = fileList.iterator();
FileItem item = it.next();
String name = item.getFieldName();
InputStream input = item.getInputStream();
fileName = item.getName();
chunk = Integer.parseInt(request.getParameter("chunk"));
chunks = Integer.parseInt(request.getParameter("chunks"));
// 处理上传文件内容
if (!item.isFormField()) {
//目标文件
File destFile = new File(folder, fileName);
//文件已存在删除旧文件(上传了同名的文件)
if (chunk == 0 && destFile.exists()) {
destFile.delete();
destFile = new File(folder, fileName);
}
//合成文件
appendFile(input, destFile);
if (chunk == chunks - 1) {
System.out.println("上传完成");
}else {
System.out.println("还剩["+(chunks-1-chunk)+"]个块文件");
}
}
}
}
private void appendFile(InputStream in, File destFile) {
OutputStream out = null;
try {
// plupload 配置了chunk的时候新上传的文件append到文件末尾
if (destFile.exists()) {
out = new BufferedOutputStream(new FileOutputStream(destFile, true), BUFFER_SIZE);
} else {
out = new BufferedOutputStream(new FileOutputStream(destFile),BUFFER_SIZE);
}
in = new BufferedInputStream(in, BUFFER_SIZE); int len = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
} finally {
try {
if (null != in) {
in.close();
}
if(null != out){
out.close();
}
} catch (IOException e) {
}
}
}

plupload批量上传分片(后台代码)的更多相关文章

  1. layui 批量上传文件 + 后台 用servlet3.0接收【我】

    前台代码: [主要参照layui官方 文件上传示例 https://www.layui.com/demo/upload.html] <!DOCTYPE html> <html> ...

  2. asp.net 下载任意格式文件 上传文件后台代码

    思路:将文件转化为流,输出到页面上的iframe中去 //下载附件逻辑 object DownLoad(NameValueCollection nv) { int attachId = nv[&quo ...

  3. WEB版一次选择多个文件进行批量上传(Plupload)的解决方案

    WEB版一次选择多个文件进行批量上传(Plupload)的解决方案  转载自http://www.cnblogs.com/chillsrc/archive/2013/01/30/2883648.htm ...

  4. ecshop 后台批量上传商品 完整上传

    ecshop 后台批量上传商品,之所以无法上传,是因为后台上传php文件方法中没有导入商品原图路径 将ecshop根目录中的admin/goods_batch.php文件全部修改为 <?php ...

  5. ux.plup.File plupload 集成 ux.plup.FileLis 批量上传预览

    //plupload 集成 Ext.define('ux.plup.File', { extend: 'Ext.form.field.Text', xtype: 'plupFile', alias: ...

  6. SpringMVC+Ajax实现文件批量上传和下载功能实例代码

    需求: 文件批量上传,支持断点续传. 文件批量下载,支持断点续传. 使用JS能够实现批量下载,能够提供接口从指定url中下载文件并保存在本地指定路径中. 服务器不需要打包. 支持大文件断点下载.比如下 ...

  7. 文件/图片,批量上传【神器】--WebUploader

    <system.web> <httpRuntime maxRequestLength="102400" executionTimeout="720&qu ...

  8. WEB版一次选择多个文件进行批量上传(WebUploader)的解决方案

    本人在2010年时使用swfupload为核心进行文件的批量上传的解决方案.见文章:WEB版一次选择多个文件进行批量上传(swfupload)的解决方案. 本人在2013年时使用plupload为核心 ...

  9. php实现大文件上传分片上传断点续传

    前段时间做视频上传业务,通过网页上传视频到服务器. 视频大小 小则几十M,大则 1G+,以一般的HTTP请求发送数据的方式的话,会遇到的问题:1,文件过大,超出服务端的请求大小限制:2,请求时间过长, ...

随机推荐

  1. 插入排序——Java实现

    一.排序思想 从数组第一个元素开始(0下标),该元素可以认为已经被排序: 取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描: 如果该元素(有序序列)大于待插入元素(待排序列),将该元素后移 ...

  2. ACM-线段树区间更新+离散化

    区间更新与单点更新最大的不同就在于Lazy思想: http://blog.sina.com.cn/s/blog_a2dce6b30101l8bi.html 可以看这篇文章,讲得比较清楚 在具体使用上, ...

  3. jquery toggle(listenerOdd, listenerEven)

    1. example: <!DOCTYPE HTML><html>    <head></head>    <body>        &l ...

  4. vue1.0 与 Vue2.0的一些区别 及用法

    1.Vue2.0的模板标记外必须使用元素包起来: eg:Vue1.0的写法 <!DOCTYPE html> <html> <head> <meta chars ...

  5. 针对 IE的 的优化

    针对 IE 的优化 有些时候,你需要对 IE 浏览器的 bug 定义一些特别的规则,这里有太多的 CSS 技巧(hacks),我只使用其中的两种方法,不 管微软在即将发布的 IE7 beta 版里是否 ...

  6. Latest SoC

    From: http://laoyaoba.com/ss6/html/68/n-505768.html 2014年国产ARM SoC芯片巡礼(上) 关注“集微网”,微信点播新闻.随要随有 来源: &l ...

  7. Android layout 布局 属性详解

    第一类:属性值 true或者 false           android:layout_centerHrizontal 水平居中     android:layout_centerVertical ...

  8. 【IOS】IOS综合

    取精华.去糟粕!适合iOS开发者的15大网站推荐 E:/IOS视频: IOS基础/01 苹果开发零基础教程 3780m --> 63h /02 IOS开发快速入门教程 /03  IOS开发进阶教 ...

  9. Matlab GUI保存图片

    % --- Executes on button press in pushbutton5. function pushbutton5_Callback(hObject, eventdata, han ...

  10. BIEE入门(三)业务模型层

    正如它的名字所示(Business Model and Mapping Layer),业务逻辑层需要把物理层的数据源以一种业务用户的视角来重新组织物理层的各个数据源(所谓的Mapping),同时在业务 ...