• js批量上传文件


    html代码:

       <input type="file" id='upload' name="upload"  multiple="multiple" onchange="uploadFile(this);" style="display:none;" />
       <button id='uploadbtn' class="rscUploadBtn" type="button" onclick="document.getElementById('upload').click();" >选择上传文件</button><br />

    js代码:

            //file为input[type=file]元素,例如:onchange="uploadFile(this);"
            function uploadFile(file) {
                if (file && file.files && file.files.length > 0) {               
                    //创建一个FormData空对象,然后使用append方法添加key/value
                    var fd = new FormData();
                    for (var i = 0; i < file.files.length; i++)
                        fd.append('file['+i+']',file.files[i]);
                   
                    fd.append("action", "filelistup");
    
                    var xhr = new XMLHttpRequest();
                    xhr.onreadystatechange = function () {
                        if (xhr.readyState == 4 && xhr.status == 200) {
                            var data = JSON.parse(xhr.responseText);
                            if (data.returnValue == 0) {
                                //批量上传成功
                                //处理成功后的逻辑
                                //TODO:.......
    
                            }
                            else alert(data.returnMsg);
                        }
                    }
    
                    //侦查当前附件上传情况 可以设置进度条
                    xhr.upload.onprogress = function (evt) {  
                        //var loaded = evt.loaded;//已经上传大小情况
                        //var tot = evt.total;//附件总大小
                        //var per = Math.floor(100 * loaded / tot);  //已经上传的百分比,如35
                       
                    }
    
                    xhr.open("post", GetHost() + 'xxx/index.ashx');
                    xhr.send(fd);
                }
            }

    c#接收文件代码:

         /// <summary>
            /// 上传文件
            /// </summary>
            /// <param name="httpRequest"></param>
            /// <param name="directoryName">保存文件的目录</param>
            /// <param name="extList">需要接收文件的后缀名,用来过滤</param>
            /// <param name="fileNames">接收成功后,保存文件的文件名</param>
            /// <param name="errorMsg">错误消息</param>
            /// <returns></returns>
            public static bool UploadFile(HttpRequestBase httpRequest, string directoryName,List<string> extList,out List<string> fileNames, out string errorMsg) {
                bool rc = false;
                errorMsg = "";
                string fileFullName = "";
                fileNames = new List<string>();
                
                try {
                    directoryName = (directoryName ?? "").Trim();
                    if (directoryName != "") {
                        //如果不存在该文件夹,则创建一个
                        if (!Directory.Exists(directoryName))
                            Directory.CreateDirectory(directoryName);
    
                        //如果创建失败
                        if (!Directory.Exists(directoryName))
                            errorMsg = string.Format("创建文件夹{0}失败!", directoryName);
                        //存在该文件夹
                        else {
                            foreach (string upload in httpRequest.Files) {
                                if (!httpRequest.Files[upload].HasFile())
                                    continue;
    
                                //获取 上传文件的名称
                                string filename = Path.GetFileName(httpRequest.Files[upload].FileName);
                                //获取 上传文件的扩展名
                                string ext = Path.GetExtension(filename);
    
                                //检查 文件扩展名
                                if (extList != null && extList.Count > 0) {
                                    if (!extList.Contains(ext)) {
                                        errorMsg = string.Format("不支持{0}格式文件的上传!", ext);
                                        return false;
                                    }
                                }
    
                                //使用guid当做当前文件的文件名
                                filename = Guid.NewGuid().ToString().Replace("-", "") + ext;
    
                                //组合保存文件的全路径名
                                fileFullName = Path.Combine(directoryName, filename);
    
                                httpRequest.Files[upload].SaveAs(fileFullName);
                                if (File.Exists(fileFullName))
                                    fileNames.Add(filename);
                                else {
                                    foreach (var fname in fileNames) {
                                        string flname = Path.Combine(directoryName, fname);
                                        if (File.Exists(flname))
                                            File.Delete(flname);
                                    }
                                    rc = false;
                                    break;
                                }
                                rc = true;                            
                            }                       
                        }
                    }
                    else {
                        errorMsg = "上传文件失败!";
                        log.Error("存放文件的文件夹名称不能为空!");
                    }
                }
                catch (Exception ex) {
                    log.Error("AddFile", ex);
                    errorMsg = "上传文件失败!";
                }
                log.DebugFormat("上传文件[{0}]{1} {2}", fileFullName, rc ? "成功!" : "失败!", errorMsg);
    
                return rc;
            }

    c#代码调用示例:

                //获取评论图片的保存目录
                string directoryName = Utils.GetMapPath("/upload/img");
                //需要过滤的图片文件后缀名
                List<string> ext = new List<string> { };
                //图片文件保存成功后获取的图片名称
                List<string> fileNames = null;
                string errorMsg = "";
                //保存图片文件
                if (Common.UploadFile(HttpContext.Current.Request.RequestContext.HttpContext.Request, directoryName, ext, out fileNames, out errorMsg)) {               

    //返回文件的相对路径名字符串数组 rc.SetReturnData(fileNames.Select(it=> Common.GetRelativePath(Path.Combine(directoryName, it))).ToList()); rc.SetResult(ErrorCode.Success); } else rc.SetResult(ErrorCode.Failed); rc.SetContentType("text/html");
  • 相关阅读:
    Linux分区
    Vim 基本配置
    Ubuntu几种常见乱码解决方法
    ADB
    ubuntu下安装配置ADB
    Tinyos学习笔记(三)
    Tinyos学习笔记(二)
    Codeforces Round #249 (Div. 2) A题
    poj 2007 Scrambled Polygon(极角排序)
    MemSQL Start[c]UP 2.0
  • 原文地址:https://www.cnblogs.com/williamwsj/p/7778924.html
Copyright © 2020-2023  润新知