WebApi上传文件
标签:添加 trim otp stream 获取文件 relative osi pfile key
使用webapi上传文件需要引用ICSharpCode.SharpZipLib.Zip;
前端代码示例:
1 DOCTYPE html>
2 html>
3 head>
4 meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 title>title>
6 meta charset="utf-8" />
7
8 script src="Resource/jquery-1.10.2.min.js">script>
9 script>
10 $(function () {
11 $("#upload").click(function () {
12 $("#imgWait").show();
13 var formData = new FormData($(‘form‘)[0]);
14 // formData.append("myfile", document.getElementById("file1").files[0]);
15 $.ajax({
16 url: "https://localhost:81/api/file/uploadfile/111",
17 type: "POST",
18 data: formData,
19 /**
20 *必须false才会自动加上正确的Content-Type
21 */
22 contentType: false,
23 /**
24 * 必须false才会避开jQuery对 formdata 的默认处理
25 * XMLHttpRequest会对 formdata 进行正确的处理
26 */
27 processData: false,
28 success: function (data) {
29 if (data.status == "true") {
30 alert("上传成功!");
31 }
32 if (data.status == "error") {
33 alert(data.msg);
34 }
35 $("#imgWait").hide();
36 },
37 error: function (data) {
38 alert("上传失败!");
39 $("#imgWait").hide();
40 }
41 });
42 });
43 });
44 script>
45
46 head>
47 body>
48 form id="uploadForm" enctype="multipart/form-data">
49 选择文件:input type="file" id="file1" name="file" />br />
50 input type="button" id="upload" value="上传" />
51 img src="wait.gif" style="display:none" id="imgWait" />
52 form>
53 body>
54
55 html>
前后端分离,处理跨域访问,在web.config文件的节点下添加跨域设置
1 httpProtocol>
2 customHeaders>
3 add name="Access-Control-Allow-Origin" value="*" />
4 add name="Access-Control-Allow-Methods" value="GET,POST,OPTIONS"/>
5 add name="Access-Control-Allow-Headers" value="Content-Type, Accept" />
6 customHeaders>
7 httpProtocol>
后端代码:
1 ///
2 /// 上传文件
3 ///
4 ///
5 [HttpPost]
6 [Route("api/fileinfo/uploadfile/{folderpath}/{bussinessid}")]
7 public async Taskstring> UploadFile(string folderpath, string bussinessid)
8 {
9 string rtValue = string.Empty;
10 ErrorCode code = null;
11 try
12 {
13 IFileInfoLogic logic = LZFactory.CreateInstance("Lz.Product.ELManage.BLL.FileInfoLogic,Lz.Product.ELManage.BLL");
14 if (!bussinessid.Equals("0"))
15 {
16 bool flag = logic.DeleteFile(bussinessid);
17 }
18
19 if (!Request.Content.IsMimeMultipartContent("form-data"))
20 {
21 throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
22 }
23 //文件上传相对路径
24 string releativePath = string.Format("/Resource/{0}/", folderpath);
25 string temprelativepath = "/Resource/temp/";
26 //文件上传物理路径
27 string uploadFolderPath = HostingEnvironment.MapPath(releativePath);
28 string temppath= HostingEnvironment.MapPath(temprelativepath);
29
30 //如果路径不存在,创建路径
31 if (!Directory.Exists(uploadFolderPath))
32 Directory.CreateDirectory(uploadFolderPath);
33 if (!Directory.Exists(temppath))
34 Directory.CreateDirectory(temppath);
35 string keyId = Guid.NewGuid().ToString();
36 //执行provider文件上传成功
37 var provider = new WithExtensionMultipartFormDataStreamProvider(temppath, keyId);
38
39 // Read the form data.
40 await Request.Content.ReadAsMultipartAsync(provider);
41
42 // This illustrates how to get the file names.
43 string fileName = string.Empty;
44
45 //FileInfoLogic logic = new FileInfoLogic();
46 //可处理批量上传
47 foreach (var file in provider.FileData)
48 {
49 //处理上传文件可能存在文件名相同的情况
50 //完整路径
51 string fullpath = file.LocalFileName;
52 //获取文件名
53 fileName = Path.GetFileName(fullpath);
54 //上传文件名
55 string fileEextension = Path.GetExtension(fileName);
56 //实际存放文件名
57 string dtnow = DateTime.Now.ToString("yyyyMMddHHmmssfff");
58 //存放路径(相对)
59 string virpath = temprelativepath + dtnow + fileEextension;
60
61 string files = uploadFolderPath + dtnow + fileEextension;
62 File.Copy(fullpath, files);
63
64
65 //文件信息写入数据库
66 bussinessid = bussinessid == "0" ? Guid.NewGuid().ToString() : bussinessid;
67 FileInfoModel fileEntity = new FileInfoModel()
68 {
69 FileId = keyId,
70 FileName = fileName,
71 RealName= dtnow + fileEextension,
72 FilePath = releativePath,
73 FileSize = "15kb",//(!string.IsNullOrEmpty(fullpath) ? DirFileHelper.GetFileSize(fullpath.Replace("\"", "")).ToString():""),
74 FileExtensions = fileEextension,
75 FileType = fileEextension.Replace(".", ""),
76 CreatTime = DateTime.Now,
77 BussinessId = bussinessid
78 };
79 logic.InsertFileInfo(fileEntity);
80 code = ErrorCodeManager.GetCode("0");
81 //返回文件信息
82 FileEntity entity = new FileEntity()
83 {
84 FileName = fileName,
85 FileUrl = releativePath +fileName,
86 FileId = keyId,
87 KeyValue = bussinessid,
88 RealFilePath= releativePath+ dtnow + fileEextension
89 };
90 JavaScriptSerializer serializer = new JavaScriptSerializer();
91 rtValue = serializer.Serialize(entity);
92 string[] tempfiles = CommonHelper.GetFiles(temppath);
93 foreach (var item in tempfiles)
94 {
95 try
96 {
97 File.Delete(item);//删除临时文件
98 }
99 catch (Exception ex)
100 {
101 continue;
102 }
103 }
104 }
105 }
106 catch (Exception ex)
107 {
108 //LogManager.Logger.Error("文件上传失败");
109 code = ErrorCodeManager.GetCode("26001");
110 rtValue = "文件上传失败";
111 }
112 return rtValue;
113 }
114
115 ///
116 /// 上传文件
117 ///
118 public class WithExtensionMultipartFormDataStreamProvider : MultipartFormDataStreamProvider
119 {
120 public string fileName { get; set; }
121 ///
122 /// 重写文件名
123 ///
124 ///
125 ///
126 public override string GetLocalFileName(System.Net.Http.Headers.HttpContentHeaders headers)
127 {
128 string fileName = !string.IsNullOrWhiteSpace(headers.ContentDisposition.FileName) ? GetValidFileName(headers.ContentDisposition.FileName) : "";
129 //return fileName + extension;
130 return fileName;
131 }
132
133 public WithExtensionMultipartFormDataStreamProvider(string rootPath, string filename)
134 : base(rootPath)
135 {
136 //fileName = filename;
137 }
138 private string GetValidFileName(string filePath)
139 {
140 char[] invalids = System.IO.Path.GetInvalidFileNameChars();
141 return String.Join("_", filePath.Split(invalids, StringSplitOptions.RemoveEmptyEntries)).TrimEnd(‘.‘);
142 }
143 }
WebApi上传文件
标签:添加 trim otp stream 获取文件 relative osi pfile key
原文地址:https://www.cnblogs.com/qinaqina/p/11876257.html
评论