ASP.NET 上传文件的两种方法
前言
在做项目的过程需要做上传的功能,所以小编写个博客园来记录一下,方便以后查看,写得不好请勿喷
本章节讲的是文件的上传,有些前端上传的时候传递的数据是不一样的,在这里讲两种形式上传的方式:
1.通过文件流方式上传文件
2.通过二进制流方式上传文件
一、文件流方式
private const string _exts = ".doc,.docx"; /// <summary> /// 上传.doc,.docx,.pdf 通过文件流上传 /// </summary> /// <returns></returns> //[AdminAccountValidate] [Route("Upload"),HttpPost] public ResponseModel<UploadResponseModel> Upload() { var response = new ResponseModel<UploadResponseModel>(); HttpFileCollection files = HttpContext.Current.Request.Files; if (files.Count > 0) { var fileExt = Path.GetExtension(files[0].FileName); if (!_exts.Contains(fileExt)) { response.Fail(AllMsg.UnsupportFileType); return response; } if (files[0].ContentLength > AllConfig.CommonStaticConfigInfo.MaxFileSize * 1024) { response.Fails(AllMsg.MaxFile); return response; } string saveTempPath = AllConfig.CommonStaticConfigInfo.ContractTemplateUrl; string path = "UploadFiles/ContractTemplate/" + fileExt + "/" + DateTime.Now.ToString("yyyyMMdd") + "/"; string fileName = Guid.NewGuid().ToString().ToLower() + fileExt; string morePath = saveTempPath + path; if (!Directory.Exists(morePath)) { Directory.CreateDirectory(morePath); } files[0].SaveAs(saveTempPath + path + fileName); response.PostContent = new UploadResponseModel() { Address = path + fileName, FileName = files[0].FileName, FileType = fileExt }; } return response; }
二、二进制流方式
/// <summary> /// 上传.doc,.docx,.pdf 通过二进制流上传 /// </summary> /// <returns></returns> //[AdminAccountValidate] [Route("Upload"),HttpPost] public async Task<ResponseModel<UploadResponseModel>> Upload() { ResponseModel<UploadResponseModel> response = new ResponseModel<UploadResponseModel>(); var request = HttpContext.Current.Request; string strFileName = request["FileName"]; var bytes = request.BinaryRead(request.TotalBytes); if (bytes.Length > 0) { //前两个字节代表文件类型,这里以 JPG 类型为例 var bs = bytes[0].ToString() + bytes[1].ToString(); var fileExt = ""; if (bs.Equals("208207")) { fileExt = ".doc"; } else { response.Fail(AllMsg.UnsupportFileType); return response; } string saveTempPath = AllConfig.CommonStaticConfigInfo.ContractTemplateUrl; string path = "UploadFiles/ContractTemplate/" + fileExt + "/" + DateTime.Now.ToString("yyyyMMdd") + "/"; string fileName = Guid.NewGuid().ToString().ToLower() + fileExt; string morePath = saveTempPath + path; if (!Directory.Exists(morePath)) { Directory.CreateDirectory(morePath); } await Task.Run(() => { using (FileStream fs = new FileStream(saveTempPath + path + fileName, FileMode.Create, FileAccess.Write)) { fs.Write(bytes, 0, bytes.Length); } }); response.PostContent = new UploadResponseModel() { Address = path + fileName, FileName = strFileName, FileType = fileExt }; } return response; }
这篇文章只做为一个备忘录嘻嘻....