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

使用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, "上传附件为空。");
            }
        }
时间: 2024-10-14 01:03:28

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

异步无刷新上传文件并且上传文件可以带上参数

关于异步上传文件并且带上参数,网上有很多关于这样的插件,而我最喜欢用的插件是ajaxfileupload.js,该插件的代码如下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件,支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象参数   参数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串   fi

Asp.net上传文件Request.files获取不到文件

使用ftp上传文件,并且Request.files获取文件,今天发现获取到的文件个数始终是0个,查了下原来form标签中需加入enctype=”multipart/form-data”,呵呵了 <form enctype="multipart/form-data" ID="form1" runat="server">       <input type="file" name="filename&q

服务器上的文件的上传和下载

我们有很多种方式上传文件到服务器上,比如FTP, 比如使用命令行工具:SZ/RZ, SCP等等的. 我之前经常使用的是SZ/RZ这个命令,但是在Mac下经常乱码然后卡住不动了,所以我很崩溃.下面说说我现在 采用的办法吧. 下载文件 python -m SimpleHTTPServer 9999 上传文件 文件名:SimpleHTTPServerWithUpload.py #!/usr/bin/env python """Simple HTTP Server With Uplo

异步无刷新上传文件而且上传文件能够带上參数

关于异步上传文件而且带上參数,网上有非常多关于这种插件.而我最喜欢用的插件是ajaxfileupload.js.该插件的代码例如以下: /*   131108-xxj-ajaxFileUpload.js 无刷新上传图片 jquery 插件.支持 ie6-ie10    依赖:jquery-1.6.1.min.js   主方法:ajaxFileUpload 接受 json 对象參数   參数说明:   fileElementId:必选,上传文件域ID   url:必选,发送请求的URL字符串  

php 上传文件实例 上传并下载word文件

上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Con

上G文件双机互传首选工具BBCP

方式一:scp 什么是scp: scp 命令是 SSH中最方便有用的命令了,scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用 ssh,并且和ssh 使用相同的认证方式,提供相同的安全保证. 与rcp 不同的是,scp 在需要进行验证时会要求你输入密码或口令. 速度:刚开始的时候33M/s 持续3分钟左右就跌落到3M左右的传输速度 方式二:rsync 什么是rsync: rsync是rcp的替代品之一,rsync 是一款高效的远程数据备份和镜象工具, 速度:无响应 方式三:

cURL 学习笔记与总结(4)使用 curl 从 ftp 上下载文件与上传文件到 ftp

下载: <?php $curlobj = curl_init(); curl_setopt($curlobj, CURLOPT_URL, "ftp://192.***.*.***/文件名"); curl_setopt($curlobj, CURLOPT_HEADER, 0); curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curlobj, CURLOPT_TIMEOUT, 300); // times

ftp上传文件不能上传到指定的文件夹

首先是,使用ftp创建连接,这一点没有错误,但是在切换目录创建文件夹的时候出现了问题. 指定创建的文件夹,总是创建失败,切换目录同样失败.最后查看文件夹的权限才知道,没有权限的问题: 然后给img文件夹下的所有文件,授权: chmod -R 777 /home/img 查看权限: 设置完成. 亲测好使.

上传文件 用inputStream获取文件流

@RequestMapping("/pointsImport.do") public void StructureImport(HttpServletRequest request, HttpServletResponse response, Long driveId) { String msg = null; try { response.setContentType("text/html;charset=utf-8"); MultipartHttpServlet