如何在 asp.net mvc 中显示来自 Amazon S3 的图像文件?

问题描述 投票:0回答:4

我需要使用控制器/操作在视图页面中显示图像(缩略图)。(例如:/Image/Thumbnail) 我可以通过调用控制器中的方法来发送本地存储的图像文件。

// sample code
public FileResult Thumbnail()
{
    // get image
    Stream outFile = System.IO.File.Open("c:\\test.jpg", FileMode.Open);

    // send image
    return File(outFile, "image/jpeg");
}

如何发送存储在 Amazon S3 中的图像文件?

我可以在上述方法中使用 Amazon S3 URL 返回图像吗? --> http://bucketname.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AKIAIDLH65EJ6LSWERDF&Expires=1266497098&Signature=lopDDErjNLy2uz6X6QCNlIjkpB0%3D

asp.net-mvc amazon-s3
4个回答
4
投票

您可以返回重定向结果:

public ActionResult Thumbnail()
{
    return Redirect("http://domain.com/test.jpg");
}

如果 url 指向图像文件,那么它就可以工作。当然,您不应该向用户显示此操作的 url,而应在其他视图中将其用作

<img>
src 属性值:

<img src="<%= Url.Action("Thumbnail", "ControllerName") %>" />

1
投票

尝试使用 WebClient 加载图像:

WebClient wClient = new WebClient();
Stream stream = new MemoryStream(wClient.DownloadData('http://....jpg'));

return File(stream, "image/jpg");

1
投票

您可以发出网络请求来获取流

public FileResult Thumbnail()
    {
        // get image
        HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(@"http://bucketname.s3.amazonaws.com/test.jpg?AWSAccessKeyId=AKIAIDLH65EJ6LSWERDF&Expires=1266497098&Signature=lopDEDErjNLy2uz6X6QCNlIjkpB0%3D");
        WebResponse myResp = myReq.GetResponse();

        Stream outFile = myResp.GetResponseStream();

        // send image
        return File(outFile, "image/jpeg");
    }

0
投票
public async Task<YourModelImages> GetImgById(int imgId)
 {
     using var dc = DataContext();
     return await dc.YourModelImages.FirstOrDefaultAsync(i => i.Id == imgId);
 }


   [Route("show-img")]
   [AllowAnonymous]
   public async Task<IActionResult> ShowImg(int imgId)
   {
       var img = await _Service.GetImgById(imgId);
       if (img == null)
       {
           return NotFound();
       }

     

       var byts = await AppService.FileReadService.ReadFileAsync(img.Url);
       return File(byts, img.Url.FileContentType());
   }

剃刀页面:

 @foreach (var img in Model.Files)
 {
     <div class="col-sm-3">
         <img src="@Url.Action("ShowImg", "Controller", new {imgId = img.Id})" class="img-responsive img-thumbnail" />
     </div>
 }
© www.soinside.com 2019 - 2024. All rights reserved.