码迷,mamicode.com
首页 > Web开发 > 详细

使用HttpRequest.Files 获取上传文件,实现上传附件功能

时间:2017-08-03 16:52:54      阅读:556      评论:0      收藏:0      [点我收藏+]

标签:url   不同   creat   image   浏览器   led   des   error   ast   

使用HttpRequest.Files 获取上传文件,实现上传附件功能,不同浏览器会有差异:

  1. 获得在 Google 浏览器上传后得到的 HttpRequest.Files  (客户端上载文件的集合)

                       技术分享

 

单个文件查看:对应的FileName 是上传文件的原始文件名:例:开发管理手册2017版.docx

 

  1. 获取IE浏览器上传后HttpRequest.Files:

        技术分享

 

单个文件查看:对应的FileName 是上传文件 带路径的文件名 例:C:\\Users\\XXX\\Desktop\\开发管理手册2017版.docx

         

 

  1. 因为不同浏览器对应的FileName不一致,在保存文件的时候,需要对FileName 进行处理:(仅获取文件名)

string aFirstName = aFile.Substring(postedFile.FileName.LastIndexOf("\\") + 1, (postedFile.FileName.LastIndexOf(".") - aFile.LastIndexOf("\\") - 1));

 

    [HttpPost, Route("PostFile")]
        public ResponeResult<List<FileModel>> PostFile()
        {
            var result = new ResponeResult<List<FileModel>>(PromptCode.SUCCESS, "附件上传成功。");
            string[] allowExtension = { ".doc", ".docx", ".xls", ".xlsx", ".pdf", ".zip", ".rar", ".jpg", ".png", ".gif" };
            var httpRequest = HttpContext.Current.Request;
            List<FileModel> docfiles = new List<FileModel>();
            if(httpRequest.Files.Count > 0) {
                var date = DateTime.Now.ToString("yyyy-MM-dd");
                var relativePath = string.Format("/Upload/Contract/{0}/", date);
                var path = HttpContext.Current.Server.MapPath(@"~" + relativePath);
                if(!Directory.Exists(path))//判断是否存在
                {
                    Directory.CreateDirectory(path);//创建新路径
                }
                FileModel mode = null;
                foreach(string file in httpRequest.Files) {
                    var postedFile = httpRequest.Files[file];
                    string fileType = System.IO.Path.GetExtension(postedFile.FileName);
                    if(string.IsNullOrEmpty(fileType)) {
                        continue;
                    }

                    var rs = allowExtension.Contains(fileType.ToLower());
                    if(!rs)
                        continue;
                    //对文件名处理 
                    var aFile = postedFile.FileName;
                    string aFirstName = aFile.Substring(postedFile.FileName.LastIndexOf("\\") + 1, (postedFile.FileName.LastIndexOf(".") - aFile.LastIndexOf("\\") - 1));
                    string strGuid = Guid.NewGuid().ToString();
                    //保存文件名
                    var fileName = "file_" + strGuid + fileType;
                    var filePath = path + fileName;
                    postedFile.SaveAs(filePath);
                    var webHostConfig = ConfigurationManager.AppSettings["WebHostDomain"];
                    var webPath = string.Format("http://{0}{1}{2}", string.IsNullOrEmpty(webHostConfig) == true ? HttpContext.Current.Request.Url.Authority : webHostConfig, relativePath, fileName );
                    mode = new FileModel();
                    mode.FileId = strGuid;
                    mode.FileName = aFirstName + fileType;
                    mode.FilePath = filePath;
                    mode.WebPath = webPath;
                    mode.RelativePath = relativePath + fileName;
                    mode.CreateTime = DateTime.Now;
                    mode.CreateUser = Session.UserId;
                    docfiles.Add(mode);
                }
                if(!this.fileService.BatchAdd(docfiles)) {
                    return new ResponeResult<List<FileModel>>(PromptCode.ERROR, "上传附件保存失败,请联系管理员。");
                }
                var filedata = docfiles;
                result.Data = filedata;
                return result;
            }
            else {
                return new ResponeResult<List<FileModel>>(PromptCode.ERROR, "上传附件为空。");
            }
        }

 

使用HttpRequest.Files 获取上传文件,实现上传附件功能

标签:url   不同   creat   image   浏览器   led   des   error   ast   

原文地址:http://www.cnblogs.com/shixl/p/7280149.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!