在MVC中下载doc文件

时间:2015-12-01 11:55:26

标签: asp.net-web-api2

我有应用程序,它是MVC 4 + Web Api + SQL服务器的组合。 我试图将doc文件下载到MVC,但我已经尝试了以下步骤。 我有Web API,我写了下面的代码。当我发送rowid时,它将值存储在数据库中varbinary。文件格式可以是.doc,pdf等任何东西......但是我正在寻找第一个doc或PDF文件格式。

当我调用Web api时,它将创建PDF文件并下载它,但该文件已完全损坏。

  [ResponseType(typeof(MandateExceptionDO))]       
  [HttpGet]
  [Route("api/DealingMandate/GetExceptionDoc/{rowId}")]
  public HttpResponseMessage GetExceptionDoc(int rowId)
  {
     IDealingMandates repository = new DealingMandatesRepository();
     List<MandateExceptionDO> mandateexceptiondoc =new  List<MandateExceptionDO>();
     mandateexceptiondoc = repository.GetExceptionDoc(rowId);
     HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
     //response.Content = new ByteArrayContent(mandateexceptiondoc[0].Content);
     //response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("multipart/form-data");

    //byte[] fileBytes = System.IO.File.ReadAllBytes(mandateexceptiondoc[0].Content);
    response.Content = new ByteArrayContent(mandateexceptiondoc[0].Content);
    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = "testing.pdf";
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    //return Ok(mandateexceptiondoc);
    return response;
   }

1 个答案:

答案 0 :(得分:0)

我能够在网络上解决这个问题,我把字节作为字符串显示在下面

  String doc = Convert.ToBase64String(customermandate.Content);

并且对于MVC方面,我从字符串转换回字节

 var doc = restClient.Execute(request);
             var response = doc.Content.Substring(1, doc.Content.Length - 2).Replace(@"\/", "/");
  byte[] docBytes = Convert.FromBase64String(response);
             if (doc.Content != null && doc.Content.Length > 0 && !string.IsNullOrEmpty(doc.Content))
             {
                 Response.Clear();    
                 Response.ContentType = "application/pdf";
                 Response.AddHeader("content-disposition", "attachment; filename=" + FileName);
                 Response.BinaryWrite(docBytes);    
                 Response.End();
          }