asp.net - asp教學 - asp是什麼



ASP.Net Web API將圖像下載為二進製文件 (3)

使用WebAPI就可以輕鬆完成此任務。 我將為唯一擴展實現自定義HTTP處理程序 ,並在那裡返回二進制響應。 優點是您還可以修改HTTP響應標頭和內容類型,因此您可以絕對控制返回的內容。

您可以設計一個URL模式(根據URL確定您要知道的返回圖像的方式),並將這些URL保存在API資源中。 一旦在API響應中返回了URL,它就可以被瀏覽器直接請求,並將到達您的HTTP處理程序,返回正確的圖像。

圖像是靜態內容,在HTTP和HTML中有自己的作用 - 無需將它們與使用API​​時使用的JSON混合使用。

我想嘗試使用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;

Answer #1

您可以將響應內容設置為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);

Answer #2

雖然這已被標記為已回答,但這並不是我想要的,所以我一直在尋找。 現在我已經弄明白了,這就是我所擁有的:

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");
}

當然,這是通過URL獲取圖像。 如果你只是想從文件服務器上取下一個圖像,我想你會替換這一行:

using (Bitmap image = new Bitmap(WebRequest.Create(myURL).GetResponse().GetResponseStream()))

有了這個:

using (Bitmap image = new Bitmap(myFilePath))

編輯:沒關係,這是常規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;
}

這與OP有很相似之處。





asp.net-web-api