我需要使用控制器/操作在视图页面中显示图像(缩略图)。(例如:/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
您可以返回重定向结果:
public ActionResult Thumbnail()
{
return Redirect("http://domain.com/test.jpg");
}
如果 url 指向图像文件,那么它就可以工作。当然,您不应该向用户显示此操作的 url,而应在其他视图中将其用作
<img>
src 属性值:
<img src="<%= Url.Action("Thumbnail", "ControllerName") %>" />
尝试使用 WebClient 加载图像:
WebClient wClient = new WebClient();
Stream stream = new MemoryStream(wClient.DownloadData('http://....jpg'));
return File(stream, "image/jpg");
您可以发出网络请求来获取流
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");
}
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>
}