zoukankan      html  css  js  c++  java
  • 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 = 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                     ////减去末尾的字符串:“
    --
    ”  
    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         }
  • 相关阅读:
    241. Different Ways to Add Parentheses java solutions
    89. Gray Code java solutions
    367. Valid Perfect Square java solutions
    46. Permutations java solutions
    116. Populating Next Right Pointers in Each Node java solutions
    153. Find Minimum in Rotated Sorted Array java solutions
    判断两颗树是否相同
    求二叉树叶子节点的个数
    求二叉树第k层的结点个数
    将二叉排序树转换成排序的双向链表
  • 原文地址:https://www.cnblogs.com/lihongchen/p/3699143.html
Copyright © 2011-2022 走看看