C# MVC - 上传多个大文件创建字节数组

Posted

技术标签:

【中文标题】C# MVC - 上传多个大文件创建字节数组【英文标题】:C# MVC - uploading multiple large files creating byte array 【发布时间】:2018-03-19 10:04:31 【问题描述】:

有人可以通过将大型文档转换为字节数组来帮助我上传(多个)大型文档吗?

我的代码目前在没有字节数组的情况下工作,但如果文档很大,它当然会失败。

控制器:

[HttpPost] [验证AntiForgeryToken] public ActionResult Create(Invoice invoice) 如果(模型状态。IsValid) 列表文件详细信息 = 新列表(); for (int i = 0; i

            if (file != null && file.ContentLength > 0)
            
                var fileName = Path.GetFileName(file.FileName);
                FileDetail fileDetail = new FileDetail()
                
                    FileName = fileName,
                    Extension = Path.GetExtension(fileName),
                    Id = Guid.NewGuid()
                ;
                fileDetails.Add(fileDetail);

                var path = Path.Combine(Server.MapPath("~/App_Data/Upload/"),
                fileDetail.Id + fileDetail.Extension);
                file.SaveAs(path);

            
        

        invoice.FileDetails = fileDetails;
        db.Invoices.Add(invoice);
        db.SaveChanges();
        return RedirectToAction("Index");
    
    return View(invoice);

和表单元素:

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

排序!

[HttpPost] [验证AntiForgeryToken] public ActionResult Create(Invoice invoice) 如果(模型状态。IsValid) 列表文件详细信息 = new List();

            for (int i = 0; i < Request.Files.Count; i++)
            
                HttpPostedFileBase httpPostedFileBase = Request.Files[i];

                if (httpPostedFileBase != null)
                
                    Stream stream = httpPostedFileBase.InputStream;
                    BinaryReader bReader = new BinaryReader(stream);
                    byte[] bytes = bReader.ReadBytes((Int32)stream.Length);
                

                HttpPostedFileBase postedFileBase = Request.Files[i];

                if (postedFileBase != null)
                
                    var fileName = Path.GetFileName(postedFileBase.FileName);

                    FileDetail fileDetail = new FileDetail()
                    
                        FileName = fileName,
                        Extension = Path.GetExtension(fileName),
                        Id = Guid.NewGuid()
                    ;
                    fileDetails.Add(fileDetail);
                    //Save the Byte Array as File.
                    var path = Path.Combine(Server.MapPath("~/App_Data/Upload/"),
                        fileDetail.Id + fileDetail.Extension);
                    postedFileBase.SaveAs(path);
                    postedFileBase.InputStream.Flush();
                
            

            invoice.FileDetails = fileDetails;
            db.Invoices.Add(invoice);
            db.SaveChanges();
            return RedirectToAction("Index");
        
        return View(invoice);
    

【讨论】:

以上是关于C# MVC - 上传多个大文件创建字节数组的主要内容,如果未能解决你的问题,请参考以下文章

大字节数组的 C# 程序性能 [重复]

将文件加载为字节数组,而不在内存中分配它 C#

如何从字节数组 c# MVC .NET Core 在 iframe 中显示 pdf

mvc 无法上传大文件 提示超过长度

ASP.NET mvc上传多个附件

C#高级编程第三版--31.1.3上传文件