1.前台CommonUpfile.aspx<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CommonUpfile.aspx.cs" Inherits="HraWeb.ETL.CommonUpfile" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server"><meta http-equiv="content-type" content="text/html; charset=UTF-8"/> ???<title></title> <script type="text/javascript" src="/Scripts/plupload/js/plupload.full.min.js"></script> ??<style> ??????#container{ ??????????margin-left:100px; ??????} ??????button{ ?????????width: 100px; ??????????height: 50px; ???????????background-color: cornflowerblue; ??????} ??</style></head><body style="font: 13px Verdana; background: #eee; color: #333"><h1 style="margin-left:50px;">请选择要导入的文件</h1><p></p><div id="filelist"></div><br /><div id="container"> ???<button id="pickfiles" >浏览</button> ???<button id="uploadfiles" >上传的文件</button></div><br /><pre id="console"></pre><script type="text/javascript"> ???// Custom example logicvar uploader = new plupload.Uploader({ ???runtimes: ‘html5,flash,silverlight,html4‘, ???unique_names:true, ???multipart: true, ???multi_selection:true, ???chunk_size: ‘10mb‘, ???browse_button : ‘pickfiles‘, // you can pass an id... ???container: document.getElementById(‘container‘), // ... or DOM Element itself ???url: ‘/ETL/CommonUpfile.aspx?_method=upload&callBack=<%=Request["callBack"]%>‘, ???flash_swf_url: ‘/Scripts/plupload/js/Moxie.swf‘, ???silverlight_xap_url: ‘/Scripts/plupload/js/Moxie.xap‘, ???????filters : { ???????max_file_size : ‘1000mb‘ ???????//,mime_types: [ ???????// ???{title : "Image files", extensions : "jpg,gif,png"}, ???????// ???{title : "Zip files", extensions : "zip"} ???????//] ???}, ???init: { ???????PostInit: function() { ???????????document.getElementById(‘filelist‘).innerHTML = ‘‘; ???????????document.getElementById(‘uploadfiles‘).onclick = function() { ???????????????uploader.start(); ???????????????return false; ???????????}; ???????}, ???????FilesAdded: function(up, files) { ???????????plupload.each(files, function(file) { ???????????????document.getElementById(‘filelist‘).innerHTML += ‘<div id="‘ + file.id + ‘">‘ + file.name + ‘ (‘ + plupload.formatSize(file.size) + ‘) <b></b></div>‘; ???????????}); ???????}, ???????UploadProgress: function (up, file) { ??????????????????????document.getElementById(file.id).getElementsByTagName(‘b‘)[0].innerHTML = ‘<span>‘ + file.percent + "%</span>"; ???????}, ???????Error: function (up, err) { ?????????????????????document.getElementById(‘console‘).appendChild(document.createTextNode("\nError #" + err.code + ": " + err.message)); ???????}, ???????FileUploaded: function (up, file, res) { ?????????????????????????????????//res = JSON.parse(res.response); ???????????//art.dialog.close() ??????????????????????//artDialog.open.origin.uploadCallBack(file.id,file.name); ??????????????????} ???????, UploadComplete(up,files) { ???????????alert("full"); ???????????var fileArr = new Array(); ???????????for (var i = 0; i < files.length; i++) { ???????????????var f = new Object(); ???????????????f.id = files[i].id; ???????????????f.name = files[i].name; ???????????????fileArr.push(f); ???????????????alert(files[i].name+"...") ???????????} ???????????var fileObj = JSON.stringify(fileArr); ???????????$.post("CommonUpfile.aspx?_method=NewImportFile", { fileObj: fileObj }, function (data) { ???????????????data = JSON.parse(data); ???????????????$.messager.alert("导入完成",data.Message); ???????????????artDialog.open.origin.dicCallback(); ???????????????art.dialog.close(); ???????????}); ???????} ???}});uploader.init();$("#console").hide();</script> ??<form id="form1" runat="server"> ???</form></body></html>2.后台 CommonUpfile.aspx.csusing Contract.Domain;using Contract.IService;using Holworth.BatchingHosting.Interface;using Holworth.Utility;using SocketIM;using System;using System.Collections.Generic;using System.IO;using System.Linq;using System.ServiceModel;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace HraWeb.ETL{ ???public partial class CommonUpfile : Common.BasePage ???{ ???????private Contract.IService.IDaoService _dao; Contract.IService.IDaoService Dao { get { if (_dao == null) { _dao = ctx.GetObject("DaoService") as Contract.IService.IDaoService; } return _dao; } } ???????protected void Page_Load(object sender, EventArgs e) ???????{ ???????????if (Request["_method"] == "upload") ???????????{ ???????????????btn_UppLoad(); ???????????} ???????????else if (Request["_method"] == "NewImportFile") ???????????{ ???????????????string fileObj = Request["fileObj"]; ???????????????var dic = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(fileObj); ???????????????Dictionary<string, string> idnames = new Dictionary<string, string>(); ???????????????foreach (var item in dic) ???????????????{ ???????????????????var id = item.id.ToString().Replace("{", "").Replace("}", ""); ???????????????????var name = item.name.ToString().Replace("{", "").Replace("}", ""); ???????????????????idnames[id] = name.ToLower(); ???????????????} ???????????????int i = 0; ???????????????try ???????????????{ ???????????????????string root = Server.MapPath("~/upload"); ???????????????????var mapList = Dao.FindList<EtlDataMap>(new Framework.QueryInfo() { CustomSQL = "select a from EtlDataMap a" }); ?????????????????????????????????????var mapDict = mapList.ToDictionary(x => x.FileNameStart.ToLower()); ???????????????????string fileName = ""; ???????????????????foreach (var item in idnames) ???????????????????{ ???????????????????????string ext = Path.GetExtension(item.Value); ???????????????????????string fileId = item.Key; ???????????????????????fileName = Path.Combine(root, fileId + ext); ???????????????????????try ???????????????????????{ ???????????????????????????SendFile(fileName, item.Value, mapDict[item.Value.Split(‘.‘)[0]].Id); ???????????????????????????HttpMessages.Instance().PushMessage("导入" + item.Value+"成功"); ???????????????????????} ???????????????????????catch (Exception ex) ???????????????????????{ ???????????????????????????HttpMessages.Instance().PushMessage("导入" + item.Value + "失败,因为:"+ex.Message); ???????????????????????????Holworth.Utility.Logger.Fatal(ex); ??????????????????????????????????????????????????} ???????????????????????????????????????????} ???????????????????????????????????????var message = new { Message = "导入成功,未导入的文件请查看文件是否在ETL中有定义!!!" }; ???????????????????Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(message)); ???????????????} ???????????????catch (Exception ex) ???????????????{ ???????????????????var message = new { ErrorCode = "-1", Message = "导入失败,因为" + ex.Message }; ???????????????????Response.Write(Newtonsoft.Json.JsonConvert.SerializeObject(message)); ???????????????????Holworth.Utility.Logger.Fatal(ex); ; ???????????????} ???????????????finally ???????????????{ ???????????????????Response.End(); ???????????????} ???????????} ???????} ???????public void SendFile(string fileName, string fileNameStart, string mapId) ???????{ ???????????string ipaddr = Holworth.Utility.HraUtility.ConfigurationManager.GetConfig("heartbeatservice", "/Config/ETL.config", HraUtility.IgnoreCase.Ignore); ???????????IHeartBeat channel = InvokeContext.CreateWCFServiceByURL<IHeartBeat>(ipaddr, "ws2007HttpBinding", null); ???????????ICommunicationObject communicationObject =(ICommunicationObject)channel; ???????????try ???????????{ ???????????????channel.ClearOldFiles(); ???????????????int maxBufferLength = 10 * 1024 * 1024; ???????????????FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); ???????????????long fileLen = fs.Length; ???????????????????????// 文件长度 ???????????????long totalLen = fileLen; ???????????????????????????// 未读取部分 ???????????????int readLen = 0; ???????????????????????????????// 已读取部分 ???????????????byte[] buffer = null; ???????????????if (fileLen <= maxBufferLength) ???????????????{ ???????????/* 文件可以一次读取*/ ???????????????????buffer = new byte[fileLen]; ???????????????????readLen = fs.Read(buffer, 0, (int)fileLen); ???????????????????channel.Transfer(fileNameStart, buffer); ???????????????} ???????????????else ???????????????{ ???????????????????/* 循环读取文件,并发送 */ ???????????????????while (totalLen != 0) ???????????????????{ ???????????????????????if (totalLen < maxBufferLength) ???????????????????????{ ???????????????????????????buffer = new byte[totalLen]; ???????????????????????????readLen = fs.Read(buffer, 0, Convert.ToInt32(totalLen)); ???????????????????????} ???????????????????????else ???????????????????????{ ???????????????????????????buffer = new byte[maxBufferLength]; ???????????????????????????readLen = fs.Read(buffer, 0, maxBufferLength); ???????????????????????} ???????????????????????channel.Transfer(fileNameStart, buffer); ???????????????????????totalLen -= readLen; ???????????????????} ???????????????} ???????????????fs.Flush(); ???????????????fs.Close(); ???????????????Dictionary<string, string> dic = new Dictionary<string, string>(); ???????????????dic["DataMap"] = string.Join(",", mapId.Split(‘,‘)); ???????????????dic["FormId"] = Guid.NewGuid().ToString(); ???????????????var s = Newtonsoft.Json.JsonConvert.SerializeObject(dic); ???????????????channel.LoadEodFile(s, Guid.NewGuid().ToString()); ???????????????communicationObject.Close(); ???????????} ???????????catch (Exception ex) ???????????{ ???????????????communicationObject.Abort(); ???????????????Holworth.Utility.Logger.Fatal(ex); ???????????????throw; ???????????} ???????????finally ???????????{ ???????????????try ???????????????{ ???????????????????File.Delete(fileName); ???????????????} ???????????????catch (Exception exx) ???????????????{ ???????????????????Holworth.Utility.Logger.Fatal(exx); ???????????????} ???????????} ???????} ???????protected void btn_UppLoad() ???????{ ???????????int statuscode = 1; ???????????string message = string.Empty; ???????????string filepath = string.Empty; ???????????string root = Server.MapPath("~/upload"); ???????????List<string> oldFiles = Net.GetFiles(root); ???????????//foreach (var item in oldFiles) ???????????//{ ???????????// ???if (File.Exists(item)) ???????????// ???{ ???????????// ???????File.Delete(item); ???????????// ???} ???????????//} ???????????// ???????????string ipaddr = Holworth.Utility.HraUtility.ConfigurationManager.GetConfig("heartbeatservice", "/Config/ETL.config", HraUtility.IgnoreCase.Ignore); ???????????// ???????????IHeartBeat channel = InvokeContext.CreateWCFServiceByURL<IHeartBeat>(ipaddr, "ws2007HttpBinding", null); ???????????// ???????????ICommunicationObject communicationObject = ???????????//(ICommunicationObject)channel; ???????????try ???????????{ ???????????????//channel.InitDataNoInit(); ???????????????//communicationObject.Close(); ???????????????if (Request.Files != null && Request.Files.Count > 0) ???????????????{ ???????????????????if (Request.Files.Count > 0) ???????????????????{ ???????????????????????try ???????????????????????{ ???????????????????????????string resourceDirectoryName = "upload"; ???????????????????????????string path = Server.MapPath("~/" + resourceDirectoryName); ???????????????????????????if (!Directory.Exists(path)) ???????????????????????????????Directory.CreateDirectory(path); ???????????????????????????int chunk = Request.Params["chunk"] != null ? int.Parse(Request.Params["chunk"]) : 0; //获取当前的块ID,如果不是分块上传的。chunk则为0 ???????????????????????????string fileName = Request.Params["name"]; //这里写的比较潦草。判断文件名是否为空。 ?????????????????????????????????????????????????????????????????????//if (!fileName.Contains("qwert")) ?????????????????????????????????????????????????????????????????????//{ ???????????????????????????// ???fileName = $"{Path.GetFileName(fileName).Split(‘.‘)[0]}qwert.dat"; ???????????????????????????//} ???????????????????????????string type = Request.Params["type"]; //在前面JS中不是定义了自定义参数multipart_params的值么。其中有个值是type:"misoft",此处就可以获取到这个值了。获取到的type="misoft"; ???????????????????????????string ext = Path.GetExtension(fileName); ???????????????????????????//fileName = string.Format("{0}{1}", Guid.NewGuid().ToString(), ext); ???????????????????????????filepath = resourceDirectoryName + "/" + fileName; ???????????????????????????fileName = Path.Combine(path, fileName); ???????????????????????????//对文件流进行存储 需要注意的是 files目录必须存在(此处可以做个判断) 根据上面的chunk来判断是块上传还是普通上传 上传方式不一样 ,导致的保存方式也会不一样 ???????????????????????????FileStream fs = new FileStream(fileName, chunk == 0 ? FileMode.OpenOrCreate : FileMode.Append); ???????????????????????????//write our input stream to a buffer ???????????????????????????Byte[] buffer = null; ???????????????????????????if (Request.ContentType == "application/octet-stream" && Request.ContentLength > 0) ???????????????????????????{ ???????????????????????????????buffer = new Byte[Request.InputStream.Length]; ???????????????????????????????Request.InputStream.Read(buffer, 0, buffer.Length); ???????????????????????????} ???????????????????????????else if (Request.ContentType.Contains("multipart/form-data") && Request.Files.Count > 0 && Request.Files[0].ContentLength > 0) ???????????????????????????{ ???????????????????????????????buffer = new Byte[Request.Files[0].InputStream.Length]; ???????????????????????????????Request.Files[0].InputStream.Read(buffer, 0, buffer.Length); ???????????????????????????} ???????????????????????????//write the buffer to a file. ???????????????????????????if (buffer != null) ???????????????????????????????fs.Write(buffer, 0, buffer.Length); ???????????????????????????fs.Close(); ???????????????????????????statuscode = 1; ???????????????????????????message = "上传成功"; ???????????????????????} ???????????????????????catch (Exception ex) ???????????????????????{ ???????????????????????????statuscode = -1001; ???????????????????????????message = "保存时发生错误,请确保文件有效且格式正确"; ???????????????????????????Holworth.Utility.Logger.Fatal(ex.Message); ???????????????????????} ???????????????????} ???????????????????else ???????????????????{ ???????????????????????statuscode = -404; ???????????????????????message = "上传失败,未接收到资源文件"; ???????????????????} ???????????????????string msg = "{\"statusCode\":\"" + statuscode + "\",\"message\":\"" + message + "\",\"filePath\":\"" + filepath + "\"}"; ???????????????????//Response.Write(msg); ???????????????} ???????????} ???????????catch (Exception ex) ???????????{ ???????????????Holworth.Utility.Logger.Fatal(ex); ???????????????// communicationObject.Abort(); ???????????} ???????????finally ???????????{ ???????????????//Response.End(); ???????????} ???????} ???????IEtlExcelService svc ???????{ ???????????get ???????????{ ???????????????return (IEtlExcelService)ctx.GetObject("EtlExcelService"); ???????????} ???????} ???}}
plupload.Uploader多文件上传
原文地址:http://www.cnblogs.com/kexb/p/7782909.html