plupload2.1.2文件合并
1.前端
(1)依赖文件:
<link type="text/css" rel="stylesheet" href="~/Content/plupload_2_1_2/jquery-ui.min.css" media="screen" />
<link type="text/css" rel="stylesheet" href="~/Content/plupload_2_1_2/jquery.ui.plupload/css/jquery.ui.plupload.css" media="screen" />
<script type="text/javascript" src="~/Content/plupload_2_1_2/jquery.js" charset="UTF-8"></script>
<script type="text/javascript" src="~/Content/plupload_2_1_2/jquery-ui.min.js" charset="UTF-8"></script>
<script type="text/javascript" src="~/Content/plupload_2_1_2/plupload.full.min.js" charset="UTF-8"></script>
<script type="text/javascript" src="~/Content/plupload_2_1_2/jquery.ui.plupload/jquery.ui.plupload.min.js" ></script>
<script type="text/javascript" src="~/Content/plupload_2_1_2/zh_CN.js" charset="UTF-8"></script>
(2)HTML
<form id="uploader">
<input type="text" name="filename" value="" />
</form>
(3)js
<script type="text/javascript">
//文件名不能相同
$(function () {
$("#uploader").plupload({
// General settings
runtimes: 'gears,flash,silverlight,browserplus,html5',
url: '/upload/plupload',
max_file_size: '6079mb',
max_file_count: 20,
chunk_size: '2048kb',
unique_names: false,
init: { // Resize images on clientside if we can
//resize: { width: 320, height: 240, quality: 90 },
rename: false, // 是否重命名文件
sortable: true, // Sort files
dragdrop: true, //启用文件到小部件能够拖放(操作)(目前唯一HTML5支持)
filters: [
{ title: "Image files", extensions: "jpg,gif,png,txt,sql" },
{ title: "music", extensions: "avi,mp4,mp3,exe,zip" }
],
views: {
list: true,
thumbs: true, // Show thumbs
active: 'thumbs'
},
// Flash settings
flash_xap_url: '~/Content/upload/js/Moxie.xap',
// Silverlight settings
silverlight_xap_url: '~/Content/upload/js/Moxie.xap',
BeforeUpload: function (uploader, file) {
//alert(123)
//var $li = $('#uploader_filelist li').hasClass('plupload_file')[0]
//var value = $($li).find('div.plupload_file_name').attr('title')
//alert($li)
},
QueueChanged: function () {
var $li = $('#uploader_filelist li')
console.log($li)
},
FileUploaded: function (uploader, file, responseObject) {
//console.log(responseObject)
//alert(curDirID)
//initData(responseObject.response.curDirId)
$.ajax({
url: '/Cloudpan/GetCurdir',
type: 'post',
success: function (id) {
initData(id)
}
})
}
}
});
});
</script>
2.后台
后台可以使用FileInputStream的构造方法追加文件内容。plupload使用“multipart/form-data”这种表单上传文件,其中每一个分块会发出一次请求,表单中有两个字段,分别是“chunk”和“chunks”,其中“chunk”是当前正在处理的文件分块的序号(从0开始计数),而“chunks”则是文件的分块总数。
(1).net
asp.net MVC【有bug】
/// <summary>
/// 文件上传
/// </summary>
/// <returns></returns>
public JsonResult plupload(string name)
{
string msg = string.Empty;
string strchunk = Request["chunk"];
string strchunks = Request["chunks"];
int chunk = ;
int chunks = ;
int.TryParse(strchunk, out chunk);
int.TryParse(strchunks, out chunks); foreach (string upload in Request.Files)
{
if (upload != null && upload.Trim() != "")
{
string path = AppDomain.CurrentDomain.BaseDirectory + "Temp\\";
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
System.Web.HttpPostedFileBase postedFile = Request.Files[upload];
string filename1 = Path.GetFileName(postedFile.FileName);
string filename = name; string newFileName = filename;
if (chunks>)
{
newFileName = chunk + "_" + filename;
}
string fileNamePath = path + newFileName;
postedFile.SaveAs(fileNamePath); if (chunks> && chunk + == chunks)
{
using (FileStream fsw = new FileStream(path + filename, FileMode.Create, FileAccess.Write))
{
BinaryWriter bw = new BinaryWriter(fsw);
// 遍历文件合并
for (int i = ; i < chunks; i++)
{
bw.Write(System.IO.File.ReadAllBytes(path + i.ToString() + "_" + filename));
bw.Flush();
}
} } }
}
return Json(new { jsonrpc = "2.0", result = "", id = "id" }); }
(2)servlet
config.properties:
uploadPath=/upload/images
package cn.getword.servlet; import com.alibaba.fastjson.JSON;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.FilenameUtils; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.*; @WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload/plupload.do"})
public class FileUploadServlet extends HttpServlet {
String uploadPath;
private static final ResourceBundle bundle = ResourceBundle.getBundle( "config" ); protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding( "UTF-8" );
Integer chunk = null; /* 分割块数 */
Integer chunks = null; /* 总分割数 */
String tempFileName = null; /* 临时文件名 */
String newFileName = null; /* 最后合并后的新文件名 */
BufferedOutputStream outputStream = null; /* System.out.println(FileUtils.getTempDirectoryPath()); */
uploadPath = request.getServletContext().getRealPath( bundle.getString( "uploadPath" ) );
File up = new File( uploadPath );
if ( !up.exists() )
{
up.mkdir();
} if ( ServletFileUpload.isMultipartContent( request ) )
{
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold( 1024 );
/* factory.setRepository(new File(repositoryPath));// 设置临时目录 */
ServletFileUpload upload = new ServletFileUpload( factory );
upload.setHeaderEncoding( "UTF-8" );
/* upload.setSizeMax(5 * 1024 * 1024);// 设置附件最大大小,超过这个大小上传会不成功 */
List<FileItem> items = upload.parseRequest( request );
for ( FileItem item : items ){
if ( item.isFormField() ) /* 是文本域 */
{
if ( item.getFieldName().equals( "name" ) )
{
tempFileName = item.getString();
/* System.out.println("临时文件名:" + tempFileName); */
} else if ( item.getFieldName().equals( "chunk" ) )
{
chunk = Integer.parseInt( item.getString() );
/* System.out.println("当前文件块:" + (chunk + 1)); */
} else if ( item.getFieldName().equals( "chunks" ) )
{
chunks = Integer.parseInt( item.getString() );
/* System.out.println("文件总分块:" + chunks); */
}
} else { /* 如果是文件类型 */
if ( tempFileName != null )
{
String chunkName = tempFileName;
if ( chunk != null )
{
chunkName = chunk + "_" + tempFileName;
}
File savedFile = new File( uploadPath, chunkName );
item.write( savedFile );
}
}
} // UUID+'.'+后缀名
newFileName = UUID.randomUUID().toString().replace( "-", "" )
.concat( "." )
.concat( FilenameUtils.getExtension( tempFileName ) );
if ( chunk != null && chunk + 1 == chunks )
{
outputStream = new BufferedOutputStream(
new FileOutputStream( new File( uploadPath, newFileName ) ) );
/* 遍历文件合并 */
for ( int i = 0; i < chunks; i++ )
{
File tempFile = new File( uploadPath, i + "_" + tempFileName );
byte[] bytes = FileUtils.readFileToByteArray( tempFile );
outputStream.write( bytes );
outputStream.flush();
tempFile.delete();
}
outputStream.flush();
}
Map<String, Object> m = new HashMap<String, Object>();
m.put( "status", true );
m.put( "fileUrl", bundle.getString( "uploadPath" ) + "/"
+ newFileName );
response.getWriter().write( JSON.toJSONString( m ) );
} catch ( FileUploadException e ) {
e.printStackTrace();
Map<String, Object> m = new HashMap<String, Object>();
m.put( "status", false );
response.getWriter().write( JSON.toJSONString( m ) );
} catch ( Exception e ) {
e.printStackTrace();
Map<String, Object> m = new HashMap<String, Object>();
m.put( "status", false );
response.getWriter().write( JSON.toJSONString( m ) );
} finally {
try {
if ( outputStream != null )
outputStream.close();
} catch ( IOException e ) {
e.printStackTrace();
}
}
} } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("/WEB-INF/views/student/uploadFile.jsp").forward(request, response);
}
}
servlet
注意:
> request.getServletContext().getRealPath(virtualPath); 将虚拟路径转化成物理路径。
> ResourceBundle bundle = ResourceBundle.getBundle( "config" );
读取src下的config.properties文件。例如:file.config对应的文件为file包下config.properties文件
plupload2.1.2文件合并的更多相关文章
- CDN的combo技术能把多个资源文件合并引用,减少请求次数
CDN的combo技术能把多个资源文件合并引用,减少请求次数.比如淘宝的写法: <link rel="stylesheet" href="//g.alicdn.co ...
- linux 两个文件合并
可以使用cat命令,有两种实现的方式,一种将两个文件合并的到一个新的文件,另一种将一个文件追加到另一个文件的末尾. 方法一:使用cat命令从文件中读入两个文件,然后将重定向到一个新的文件.这种方法可以 ...
- grunt配置太复杂?使用Qbuild进行文件合并、压缩、格式化等处理
上次简单介绍了下Qbuild的特点和配置,其实实现一个自动化工具并不复杂,往简单里说,无非就是筛选文件和处理文件.但Qbuild的源码也并不少,还是做了不少工作的. 1. 引入了插件机制.在Qbuil ...
- js或css文件合并的三种方式推荐
源文档 <http://www.jb51.net/article/32834.htm> 在Web项目的开发中,js,css文件会随着项目的开发变得越来越多,越来越大,这就给给性能方面带来一 ...
- AngularJS结合RequireJS做文件合并压缩的那些坑
我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须 ...
- 前端js文件合并三种方式
最近在思考前端js文件该如何合并,当然不包括不能合并文件,而是我们能合并的文件,想了想应该也只有三种方式. 三个方式如下: 1. 一个大文件,所有js合并成一个大文件,所有页面都引用它. 2. 各个页 ...
- Hadoop MapReduce编程 API入门系列之小文件合并(二十九)
不多说,直接上代码. Hadoop 自身提供了几种机制来解决相关的问题,包括HAR,SequeueFile和CombineFileInputFormat. Hadoop 自身提供的几种小文件合并机制 ...
- 前端js,css文件合并三种方式,bat命令
前端js,css文件合并三种方式,bat命令 前端js文件该如何合并三个方式如下:1. 一个大文件,所有js合并成一个大文件,所有页面都引用它.2. 各个页面大文件,各自页面合并生成自己所需js的大文 ...
- julia文件合并排序.jl
julia文件合并排序.jl """ julia文件合并排序.jl http://bbs.bathome.net/thread-39841-1-1.html 2016年3 ...
随机推荐
- PCANet: A Simple Deep Learning Baseline for Image Classification?--名词解释
1 上采样与下采样 缩小图像(或称为下采样(subsampled)或降采样(downsampled))的主要目的有两个: 使得图像符合显示区域的大小 生成对应图像的缩略图 下采样原理:对于一幅图像I尺 ...
- Django之后台管理一
所有的网站都有一个管理后台来对所有的网站数据进行管理.那么Django的后台管理是如何进行的.在网页中输入http://127.0.0.1:8001/admin.得到如下的登录界面 在这里可以看到管理 ...
- (原创)Problem F: WPF的三位数
Description PF哥是一个爱说骚话的骚年,今天他决定要用阿拉伯数字来说骚话,他将1,2,…,9共9个数字分成了三组,分别组成三个三位数,且使这三个三位数构成1:2:3的比例 他要说的骚话就是 ...
- UVa_Live 3664(精度坑)
题意很好理解的贪心题,然而却卡疯了的精度坑. 再次理解一下double小数运算时可能导致的精度问题,本题为避免该问题可以将小数乘以100化为整数进行比较,输出的时候再除以100就ok: 思路也很好想, ...
- Shell-4-让文本飞
1.正则表达式 ^ 行起始标志 $ 行尾标记 . 匹配任意一个字符 [ ] 匹配包含在[字符]之中的任意一个字符,coo[kl]匹配cook或cool [^] 匹配除[^字符]的任意一个字符 [-] ...
- PAT天梯赛L2-005 集合相似度
题目链接:点击打开链接 给定两个整数集合,它们的相似度定义为:Nc/Nt*100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你的任务就是计算任意一对给定集合的 ...
- Python集合字典运算符
1.集合2.字典3.运算符优先级 1.集合 创建:{} set([]) 注意:创建空的集合要用set() 特点:元素唯一,无序 运算: & 交集 | 并集 - 差集 方法: s ...
- Django 05 自定义过滤器、自定义标签
Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...
- Linux(ubuntu)下固定IP的方法
写在前面,问:为什么要固定ip.答:要知道固定IP的好处多多,随意搬动,固定共享地址,不怕断网等等 首先,我们要选取一个局域网内的IP,方法如下: 1.选取IP号段,一般是路由器DCHP以外的IP地址 ...
- node.js 设置 淘宝 镜像
npm config set registry "https://registry.npm.taobao.org" npm info underscore (如果上面配置正确这个命 ...