IFormFile可以转成FileStream吗

-一个大坑 2019-08-21 11:12:11
上传的excel(IFormFile类型)先保存到服务器,然后再根据保存的路径读取成FileStream类型,循环
好像挺麻烦的,可以直接从IFormFile类型循环读取内容或者从IFormFile类型转成FileStream类型吗
...全文
3732 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
YannJing 2019-11-03
  • 打赏
  • 举报
回复
   [HttpPost]
        public ActionResult ImportAuditGroup([FromForm] int projectId, IFormCollection files)
        { 
            var allFileLen = files.Files.Sum(x => x.Length);
            var resultBuffer = new List<byte>((int)allFileLen);
            foreach (var filesFile in files.Files)
            {
                var fileName = filesFile.FileName;//文件名
                var fileExt = Path.GetExtension(fileName);//后缀 
                var ms = filesFile.OpenReadStream();//打开文件流
                var msBuffer = ms.ToArray();//文件转为字节数组
                ms.Dispose();

                var memoryStreamBuffer = _batchUserServices.BatchCreateAuditGroup(currentContextUser.CompanyId, projectId, msBuffer);

                MemoryStream resultMemoryStream = new MemoryStream();
                resultMemoryStream.WriteArray(fileName.GetBytes());
                resultMemoryStream.Write(memoryStreamBuffer);
                resultBuffer.AddRange(resultMemoryStream.ToArray());
                resultMemoryStream.Dispose();
            }
            return File(resultBuffer.ToArray(), "application/octet-stream");
        }
ms.ToArray()是扩展方法 需要引用NewLife.Core的Nuget包。Newlife的github地址:https://github.com/NewLifeX/X 在IOHelper文件里 代码太多,就不贴出来了。 IFormCollection (core2.2) IFormFile (core2.1) 之前查到2.2里好像直接用IFormFile拿不到 又3条限制了。。。
YannJing 2019-11-03
  • 打赏
  • 举报
回复
https://www.cnblogs.com/ChinaNebula/p/11780296.html 回复限制了 看这个吧
-一个大坑 2019-11-02
  • 打赏
  • 举报
回复
引用 11 楼 YannJing 的回复:
[quote=引用 1 楼 -一个大坑 的回复:] var aa= file.OpenReadStream(); var hssfworkbook = new HSSFWorkbook(aa); //Stream OpenReadStream();返回的也是Stream // public HSSFWorkbook(Stream s);这个传的也是Stream 报错了The inner stream position has changed unexpectedly.
1、aa转成byte[] ; 2、byte转成MemoryStream 3、new HSSFWorkbook(memoryStream) 建议用 IWorkbook workbook = WorkbookFactory.Create(ms); 自动识别版本 [/quote] 1.我也考虑过转byte[]再转stream,不过还是想看下能不能直接用的

public byte[] StreamToBytes(Stream stream) 
{ 
byte[] bytes = new byte[stream.Length]; 
stream.Read(bytes, 0, bytes.Length); 
// 设置当前流的位置为流的开始 
stream.Seek(0, SeekOrigin.Begin); 
return bytes; 
}
3.可以自动识别呀,我还是通过判断后缀是不是xls决定用哪个读取方法
-一个大坑 2019-11-01
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
有copyto,那就copyto到另一个stream,当然建议还是seek一下 对于stream操作应该养成习惯,没事seek一下,就像俺们没事ctrl+s一样,纯粹的无意识行为了
这样吗 var aa = file.OpenReadStream(); //byte[] bytes = new byte[aa.Length]; //var bb = new Stream(); //aa.CopyTo(bb); aa.Seek(0, SeekOrigin.Begin); var hssfworkbook = new HSSFWorkbook(aa);
YannJing 2019-11-01
  • 打赏
  • 举报
回复
引用 1 楼 -一个大坑 的回复:
var aa= file.OpenReadStream(); var hssfworkbook = new HSSFWorkbook(aa); //Stream OpenReadStream();返回的也是Stream // public HSSFWorkbook(Stream s);这个传的也是Stream 报错了The inner stream position has changed unexpectedly.
1、aa转成byte[] ; 2、byte转成MemoryStream 3、new HSSFWorkbook(memoryStream) 建议用 IWorkbook workbook = WorkbookFactory.Create(ms); 自动识别版本
-一个大坑 2019-11-01
  • 打赏
  • 举报
回复
引用 7 楼 wanghui0380 的回复:
有copyto,那就copyto到另一个stream,当然建议还是seek一下 对于stream操作应该养成习惯,没事seek一下,就像俺们没事ctrl+s一样,纯粹的无意识行为了
你们那里也是先把excel保存到服务器,再读取吗? 没事seek一下是什么意思,把一个文件流copyto到另一个吗? var aa = file.OpenReadStream(); var bb = new Stream(); //stream不能new,只有一个stream,怎么copy到另一个去? aa.CopyTo(bb);
wanghui0380 2019-10-31
  • 打赏
  • 举报
回复
有copyto,那就copyto到另一个stream,当然建议还是seek一下 对于stream操作应该养成习惯,没事seek一下,就像俺们没事ctrl+s一样,纯粹的无意识行为了
wanghui0380 2019-10-31
  • 打赏
  • 举报
回复
The inner stream position has changed unexpectedly. 没折腾这个,不过报错信息是stream的position问题,查找怎么seek他
-一个大坑 2019-10-31
  • 打赏
  • 举报
回复
有人解答吗....
冰川711 2019-08-21
  • 打赏
  • 举报
回复
HSSFWorkbook 这个方法的代码呢
-一个大坑 2019-08-21
  • 打赏
  • 举报
回复
var aa= file.OpenReadStream(); var hssfworkbook = new HSSFWorkbook(aa); //Stream OpenReadStream();返回的也是Stream // public HSSFWorkbook(Stream s);这个传的也是Stream 报错了The inner stream position has changed unexpectedly.
-一个大坑 2019-08-21
  • 打赏
  • 举报
回复
public static DataTable ExcelToDataTable(IFormFile file) { var aa = file.OpenReadStream(); var hssfworkbook = new HSSFWorkbook(aa); 。。。。 } 两个都是引用自带的方法
-一个大坑 2019-08-21
  • 打赏
  • 举报
回复
引用 2 楼 冰川711 的回复:
HSSFWorkbook 这个方法的代码呢
npoi自带的,看不到代码

62,238

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧