ASP .Net Web API将图像下载为二进制文件

spa*_*reo 30 asp.net rest asp.net-web-api

我想尝试使用Web API进行休息调用,但我希望响应是存储在数据库中的实际二进制映像,而不是JSON base64编码的字符串.有人对此有一些指示吗?

更新 - 这是我最终实现的:

 HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
 result.Content = new StreamContent(new MemoryStream(profile.Avatar));
 result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
 result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
 result.Content.Headers.ContentDisposition.FileName = "avatar.png";
 return result;
Run Code Online (Sandbox Code Playgroud)

Mik*_*son 29

您可以将响应内容设置为StreamContent对象:

        var fileStream = new FileStream(path, FileMode.Open);

        var resp = new HttpResponseMessage()
        {
            Content = new StreamContent(fileStream)
        };

        // Find the MIME type
        string mimeType = _extensions[Path.GetExtension(path)];
        resp.Content.Headers.ContentType = new MediaTypeHeaderValue(mimeType);
Run Code Online (Sandbox Code Playgroud)

  • 将你的答案标记为答案,因为它是对问题的直接回应,并且最接近我的需要.感谢您抽出宝贵时间回答! (2认同)

vbu*_*ger 18

虽然这已被标记为已回答,但这并不是我想要的,所以我一直在寻找.现在我已经弄明白了,这就是我所拥有的:

public FileContentResult GetFile(string id)
{
    byte[] fileContents;
    using (MemoryStream memoryStream = new MemoryStream())
    {
        using (Bitmap image = new Bitmap(WebRequest.Create(myURL).GetResponse().GetResponseStream()))
            image.Save(memoryStream, ImageFormat.Jpeg);
        fileContents = memoryStream.ToArray();
    }
    return new FileContentResult(fileContents, "image/jpg");
}
Run Code Online (Sandbox Code Playgroud)

当然,这是通过URL获取图像.如果你只是想从文件服务器上取下一个图像,我想你会替换这一行:

using (Bitmap image = new Bitmap(WebRequest.Create(myURL).GetResponse().GetResponseStream()))
Run Code Online (Sandbox Code Playgroud)

有了这个:

using (Bitmap image = new Bitmap(myFilePath))
Run Code Online (Sandbox Code Playgroud)

编辑:没关系,这是常规的MVC.对于Web API,我有这个:

public HttpResponseMessage Get(string id)
{
    string fileName = string.Format("{0}.jpg", id);
    if (!FileProvider.Exists(fileName))
        throw new HttpResponseException(HttpStatusCode.NotFound);

    FileStream fileStream = FileProvider.Open(fileName);
    HttpResponseMessage response = new HttpResponseMessage { Content = new StreamContent(fileStream) };
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("image/jpg");
    response.Content.Headers.ContentLength = FileProvider.GetLength(fileName);
    return response;
}
Run Code Online (Sandbox Code Playgroud)

这与OP有很相似之处.