zoukankan      html  css  js  c++  java
  • plupload.Uploader多文件上传

    1.前台
    <%@ 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{
               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> &nbsp;&nbsp;&nbsp;
        <button id="uploadfiles" >上传的文件</button>
    </div>
    
    <br />
    <pre id="console"></pre>
    
    
    <script type="text/javascript">
        // Custom example logic
    var 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 () {
                    alert("开始上传");
                    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("
    Error #" + 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.后台
    using 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"];
                    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;
                   
                    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
                    {
                        channel.ClearOldFiles();
                        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 = "";
                        idnames.AsParallel().ForAll(item =>
                        {
                            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);
    
                            }
    
                        });
                        HttpMessages.Instance().PushMessage("文件传输完毕");
                     
                        string mapIds = "";
                        foreach (var item in idnames)
                        {
                            mapIds += mapDict[item.Value.Split('.')[0]].Id + ",";
                        }
                        mapIds = mapIds.TrimEnd(',');
                        Dictionary<string, string> dic1 = new Dictionary<string, string>();
                        dic1["DataMap"] = string.Join(",", mapIds.Split(','));
                        dic1["FormId"] = Guid.NewGuid().ToString();
                        var s = Newtonsoft.Json.JsonConvert.SerializeObject(dic1);
                        try
                        {
                            channel.LoadEodFile(s, Guid.NewGuid().ToString());
                            communicationObject.Close();
                        }
                        catch (Exception ex)
                        {
                            communicationObject.Abort();
                        }
    
                        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
                {
                   
                    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");
                }
            }
    
        }
    }
  • 相关阅读:
    2010年7月29日_周四_Working with CallbackResults
    2010年7月19日_周一_Using the Common Data Source API in a Web application
    2010年7月20日_周二_Accessing ArcGIS Server from a Web application
    Flex代码自动换行(自动格式化)
    2010年7月21日_周三_Developing a scriptable Web ADF control
    2010年7月30日_周五_ASP.NET callback solution
    2010年8月02日_周一_map control
    SDE数据库的异地部署
    2010年7月27日_周二_introduction_to_web_controls
    ICE在VC中的配置
  • 原文地址:https://www.cnblogs.com/kexb/p/7782909.html
Copyright © 2011-2022 走看看