我要完成的目标只是从API请求图像,然后以append
方法的形式将其返回到客户端。
否,由于API的用户/通行证要求,我不能完全在客户端处理此问题。
否,我无法在图片的src中使用@Url.Action(ImageFromPath)
方法。
那就是说,这是我的后端代码:
[HttpGet("api/GetImage")]
public ActionResult ImageFromPath()
{
string URL = "http://user:pass@MYIPADDRESS/cgi-bin/snapshot.cgi?c=1&authbasic=asdf1234";
var srcImage = Image.FromFile(URL);
var stream = new MemoryStream();
srcImage.Save(stream, ImageFormat.Png);
return File(stream.ToArray(), "image/png");
}
客户端的目标是:
$http.get('/api/GetImage').then(function (response) {
$("#imgDiv").append('<img src="data:image/png;base64,' + response.data + '" />');
});
我遇到的问题是srcImage = Image.FromFile(URL)
,但错误:
发生了'System.IO.FileNotFoundException'类型的异常 CoreCompat.System.Drawing.dll但未在用户代码中处理
如果它有任何区别,调用API URL本身需要几秒钟才能返回Image。
任何人都可以建议正确的方法来完成这项工作吗?或者至少帮助我当前的方法有效?
编辑 - 我查看了How can I convert image url to system.drawing.image的答案,但它只提供了使用WebClient
的解决方案,而ASP.Net Core尚未提供。
答案 0 :(得分:1)
如果您想从网址读取文件,则需要使用 HttpClient 。
using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace DemoWebCore.Controllers
{
[Route("api/[controller]")]
public class FilesController : Controller
{
// GET api/files/sample.png
[HttpGet("{fileName}")]
public async Task<string> Get(string fileName)
{
using (HttpClient client = new HttpClient())
{
HttpResponseMessage response = await client.GetAsync(
"https://i.stack.imgur.com/hM8Ah.jpg?s=48&g=1");
byte[] content = await response.Content.ReadAsByteArrayAsync();
return "data:image/png;base64," + Convert.ToBase64String(content);
}
}
}
}
<强> HomeController.cs 强>
using Microsoft.AspNetCore.Mvc;
namespace DemoWebCore.Controllers
{
public class HomeController : Controller
{
public IActionResult Index()
{
return View();
}
}
}
查看强>
<img id="sample-img" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
var url = "/api/files/sample.png";
$.get(url, function (data) {
console.log(data);
$("#sample-img").attr('src', data);
});
})
</script>
您最初在做的是从文件系统中读取文件。如果该文件位于您的wwwroot文件夹中,this answer可能会对您有所帮助。