在ASP.NET MVC中下载文件时出错

本文关键字:文件 出错 下载 ASP NET MVC | 更新日期: 2023-09-27 18:19:51

我在ASP.NET MVC中工作。我已经在数据库中存储了一个文件,现在我想下载并显示它的内容。我在分层工作。

这是我的密码。

用于上传文件的控制器操作

[HttpPost]
public ActionResult Edit(int id, UpdateAdvertisement model, HttpPostedFileBase file)
{
    try
    {
        AdvertisementDTO add = new AdvertisementDTO();                
        add.DocImage = new byte[file.ContentLength];
        add.ContentType = file.ContentType;
        add.DocName = Convert.ToString(DateTime.Now.Ticks);              
        new AdvertisementHandler().Update(id, add);
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

下载文件的控制器操作

 public FileContentResult DownloadFile(int id)
    {
        string DocumentContentType  = new AdvertisementHandler().DownloadContent(id);
        string DocumentName = new AdvertisementHandler().DownloadDocumentName(id);
        byte[] DocumentImage = new AdvertisementHandler().DownloadImage(id);
        //return File(filename, contentType, "Report.pdf");
        return File(DocumentImage, DocumentContentType, DocumentName);
        //return File.ReadAllBytes(DocumentName);
    }

业务逻辑层

这些是用于访问数据库的查询。

public byte[] DownloadImage(int id)
{
    byte[] file = (from f in db.TBL_ADVERTISEMENT
       where f.ID == id
       select new AdvertisementDTO
       {
           DocImage = f.DOCUMENT_IMG
       }
       ).ToArray();
     return file;
}
public string DownloadContent(int id ) 
{
    string file = (from f in db.TBL_ADVERTISEMENT
      where f.ID == id
      select new AdvertisementDTO
      {
          ContentType = f.CONTENTTYPE
      }
      ).ToString();
     return file;
}
public string DownloadDocumentName(int id)
{
    string file = (from f in db.TBL_ADVERTISEMENT
      where f.ID == id
      select new AdvertisementDTO
      {
        DocName = f.DOC_NAME
      }
      ).ToString();
      return file;
}

当我编译这个代码时会出现这个错误

错误1

无法将类型"ORS.DTO.AdvertisementDTO[]"隐式转换为"byte[]"

F: ''项目''在线招聘系统'' ORS.BLL''广告处理程序.cs 59 28 ORS.BLL

这是我的广告DTO。。。

namespace ORS.DTO
{
    public class AdvertisementDTO
    {
        public int ID { get; set; }
        public string AddNumber { get; set; }
        public string Description { get; set; }
        public byte[] DocImage { get; set; }
        public string ContentType { get; set; }
        public string DocName { get; set; }
        public DateTime StartDate { get; set; }
        public DateTime EndDate { get; set; }
        public int StatusID { get; set; }
        
        public virtual RecordStatusDTO RecordStatus { get; set; }
    }
}

在ASP.NET MVC中下载文件时出错

对对象调用.ToArray()不会将其转换为字节数组。您省略了AdvertisementDTO的定义,所以我只能猜测它已经是一个字节数组。如果不是这样的话,请发布AdvertisementDTO的代码,我会更新这篇文章。

    byte[] file = (from f in db.TBL_ADVERTISEMENT
                   where f.ID == id
                   select f.DOCUMENT_IMG).SingleOrDefault();
    return file;