首页 > 代码库 > Rest文件上传

Rest文件上传

文件上传时传过来一个stream

代码如下:

 1  /// <summary>
 2         /// 上传文件
 3         /// </summary>
 4         /// <param name="fileName">文件名</param>
 5         /// <param name="fileStream">文件流</param>
 6         /// <returns></returns>
 7         public ResponseType<int> UploadFile(string projectId, string DocId, string LastModifier, Stream fileStream)
 8         {
 9             ResponseType<int> result = new ResponseType<int>();
10             string Path = string.Empty;
11             try
12             {
13                 if (fileStream == null)
14                 {
15                     throw new Exception("没有上传文件");
16                 }
17                 string relativePath = fileInfoBLL.GetFilePath(projectId, DocId);
18                 Path = System.IO.Path.Combine(filePath, relativePath);
19                 string fileName = fileInfoBLL.SaveFie(Path, fileStream);
20                          
21                 FilesInfo filesInfo = new FilesInfo();
22                 filesInfo.DocManageId = Convert.ToInt32(DocId);
23                 filesInfo.FileName = fileName;
24                 filesInfo.FilePath = System.IO.Path.Combine(relativePath, fileName);
25                 filesInfo.IsChecked = false;
26                 filesInfo.LastmodifiedDateTime = DateTime.Now;
27                 filesInfo.LastModifier = LastModifier;
28                 filesInfo.ProjectId = Convert.ToInt32(projectId);
29                 int fileId = fileInfoBLL.SaveFileInfo(filesInfo);
30                 if (fileId > 0)
31                 {
32                     result.IsSuccess = true;
33                     result.ErrorMessage = "文件保存成功!";
34                     result.Value =http://www.mamicode.com/ fileId;
35                 }
36             }
37 
38             catch (Exception ex)
39             {
40 
41                 ExceptionHandler.ExceptionHelper.Instance.HandleException(ex);
42                 result.IsSuccess = false;
43                 result.ErrorMessage = "文件保存失败!";
44             }
45 
46             return result;
47         }

黄色部分为真正文件上传代码:

 1    /// <summary>
 2         /// 保存文件
 3         /// </summary>
 4         /// <param name="relatePath">文件保存的路径</param>
 5         /// <param name="fileSteam">文件流</param>
 6         public string SaveFie(string relatePath, Stream fileSteam)
 7         {
 8             string fileName = string.Empty;
 9             try
10             {
11 
12                 if (!Directory.Exists(relatePath))  //判断文件目录
13                 {
14                     Directory.CreateDirectory(relatePath);
15                 }              
16 
17                 using (var ms = new MemoryStream())
18                 {
19                     fileSteam.CopyTo(ms);
20                     ms.Position = 0;
21 
22                     var encoding = Encoding.UTF8;
23                     var reader = new StreamReader(ms, encoding);
24                     var headerLength = 0L;
25 
26                     //读取第一行  
27                     var firstLine = reader.ReadLine();
28                     //计算偏移(字符串长度+回车换行2个字符)  
29                     headerLength += encoding.GetBytes(firstLine).LongLength + 2;
30 
31                     //读取第二行  
32                     var secondLine = reader.ReadLine();
33                     //计算偏移(字符串长度+回车换行2个字符)  
34                     headerLength += encoding.GetBytes(secondLine).LongLength + 2;
35                     //解析文件名  
36                  
37                     fileName = new System.Text.RegularExpressions.Regex("filename=\"(?<fn>.*)\"").Match(secondLine).Groups["fn"].Value;
38 
39                     //一直读到空行为止  
40                     while (true)
41                     {
42                         //读取一行  
43                         var line = reader.ReadLine();
44                         //若到头,则直接返回  
45                          if (line == null )
46                     
47                             break;
48                         //若未到头,则计算偏移(字符串长度+回车换行2个字符)  
49                          headerLength += encoding.GetBytes(line).LongLength + 2;
50                     
51                         if (string.IsNullOrEmpty(line))
52                             break;
53                     }
54 
55                     //设置偏移,以开始读取文件内容  
56                     ms.Position = headerLength;
57                     ////减去末尾的字符串:“\r\n--\r\n”  
58                     ms.SetLength(ms.Length - encoding.GetBytes(firstLine).LongLength - 3 * 2);
59 
60                     using (var fileToupload = new FileStream(System.IO.Path.Combine(relatePath,fileName), FileMode.Create))
61                     {
62                         ms.CopyTo(fileToupload);
63                         fileToupload.Close();
64                         fileToupload.Dispose();
65                     }
66                 }               
67             }
68             catch (Exception ex)
69             {
70                 ExceptionHandler.ExceptionHelper.Instance.HandleException(ex);
71             }
72 
73             return fileName;
74         }