【问题标题】:Asp.Net MVC download varbinary stored in database as fileAsp.Net MVC 下载 varbinary 作为文件存储在数据库中
【发布时间】:2021-10-02 01:56:36
【问题描述】:

我想将存储在数据库中的 varbinary 作为文件下载。我可以下载该文件,但是从我的应用程序下载的所有文件都无法打开。我注意到我上传了 200 kb 大小的 pdf 文件。但是当我下载那个文件时,它只返回 30 个字节。

代码如下:

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Upload(Upload model, HttpPostedFileBase uploadFile, String random_number, String rcf_number)
    {
        var db = new RCFOnlineEntities();
        if(uploadFile != null)
        {
            byte[] bytes;
            using (BinaryReader br = new BinaryReader(uploadFile.InputStream))
            {
                bytes = br.ReadBytes(uploadFile.ContentLength);
            }

            model.file_base6 = bytes;
            model.file_ext = uploadFile.ContentType;
            model.file_name = uploadFile.FileName;
            model.rcfnumber = rcf_number;
            model.randomnumber = random_number;
        }

      

        db.Uploads.Add(model);
        db.SaveChanges();

        return RedirectToAction("Edit", "GetRCFOnline", new { random_number = random_number });
    }

[HttpGet]
   public FileResult DownLoadFile(int id, String random_number)
   {

      List<Upload> ObjFiles = GetUploadClasses(random_number);

      var FileById = (from FC in ObjFiles
                       where FC.file_id.Equals(id)
                       select new { FC.file_name, FC.file_base6 , FC.file_ext}).ToList().FirstOrDefault();


    
      return File(FileById.file_base6, FileById.file_ext, FileById.file_name);

   }

您能告诉我代码中的错误在哪里吗?

【问题讨论】:

    标签: asp.net asp.net-mvc entity-framework


    【解决方案1】:

    解决方案 1:

    使用 uploadFile.InputStream.Length 而不是 uploadFile.ContentLength 以获取正确的上传文件大小,即

    using (BinaryReader br = new BinaryReader(uploadFile.InputStream))
    {
         bytes = br.ReadBytes(uploadFile.InputStream.Length);
    }
    

    解决方案 2:

    如果 BinaryReader 不是固定要求,则使用以下解决方案来获取上传文件的字节,即

    byte[] bytes = new byte[uploadFile.InputStream.Length];
    uploadFile.InputStream.Read(bytes, 0, bytes.Length);
    

    【讨论】:

    • 它说“无法从 long 转换为 int”
    • 如果您需要以字节为单位的流并且 BinaryReader 不是固定要求,那么您可以简单地使用我在上面的答案中更新的解决方案 2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多