首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Web API返回文件?

如何使用Web API返回文件?
EN

Stack Overflow用户
提问于 2012-06-21 02:07:40
回答 6查看 192.5K关注 0票数 110

我使用的是ASP.NET Web API。

我想从应用程序接口( API生成)下载一个带有C#的PDF。

我可以让API返回一个byte[]吗?对于C#应用程序,我可以这样做吗:

代码语言:javascript
复制
byte[] pdf = client.DownloadData("urlToAPI");? 

代码语言:javascript
复制
File.WriteAllBytes()?
EN

回答 6

Stack Overflow用户

发布于 2015-08-26 02:49:05

我执行了以下操作:

代码语言:javascript
复制
[HttpGet]
[Route("api/DownloadPdfFile/{id}")]
public HttpResponseMessage DownloadPdfFile(long id)
{
    HttpResponseMessage result = null;
    try
    {
        SQL.File file = db.Files.Where(b => b.ID == id).SingleOrDefault();

        if (file == null)
        {
            result = Request.CreateResponse(HttpStatusCode.Gone);
        }
        else
        {
            // sendo file to client
            byte[] bytes = Convert.FromBase64String(file.pdfBase64);


            result = Request.CreateResponse(HttpStatusCode.OK);
            result.Content = new ByteArrayContent(bytes);
            result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
            result.Content.Headers.ContentDisposition.FileName = file.name + ".pdf";
        }

        return result;
    }
    catch (Exception ex)
    {
        return Request.CreateResponse(HttpStatusCode.Gone);
    }
}
票数 43
EN

Stack Overflow用户

发布于 2019-07-04 01:55:33

.Net Core需要注意的是:如果我们想发送原始字节,可以使用FileContentResult并将contentType设置为application/octet-stream。示例:

代码语言:javascript
复制
[HttpGet("{id}")]
public IActionResult GetDocumentBytes(int id)
{
    byte[] byteArray = GetDocumentByteArray(id);
    return new FileContentResult(byteArray, "application/octet-stream");
}
票数 26
EN

Stack Overflow用户

发布于 2017-12-30 06:32:51

ApiController中的IHttpActionResult为例。

代码语言:javascript
复制
[HttpGet]
[Route("file/{id}/")]
public IHttpActionResult GetFileForCustomer(int id)
{
    if (id == 0)
      return BadRequest();

    var file = GetFile(id);

    IHttpActionResult response;
    HttpResponseMessage responseMsg = new HttpResponseMessage(HttpStatusCode.OK);
    responseMsg.Content = new ByteArrayContent(file.SomeData);
    responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    responseMsg.Content.Headers.ContentDisposition.FileName = file.FileName;
    responseMsg.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
    response = ResponseMessage(responseMsg);
    return response;
}

如果您不想下载PDF并使用PDF查看器内置的浏览器,请删除以下两行:

代码语言:javascript
复制
responseMsg.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
responseMsg.Content.Headers.ContentDisposition.FileName = file.FileName;
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11125535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档