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         }
  • 相关阅读:
    jQuery-1.9.1源码分析系列(九) CSS操作
    jQuery-1.9.1源码分析系列(八) 属性操作
    jQuery-1.9.1源码分析系列(七) 钩子(hooks)机制及浏览器兼容续
    由一次虚拟内存耗尽看32bits elf在x86_64下运行方式及地址空间布局
    关于TCP关闭想到的一些问题
    pure virtual method called的一种情况
    linux下内存分配时overcommit使用
    gcc对C++局部静态变量初始化相关
    为什么cat binary之后可能出现乱码
    gcc的模版匹配及其它
  • 原文地址:https://www.cnblogs.com/lihongchen/p/3699143.html
Copyright © 2011-2022 走看看