如何使用webclient在c#中下载图像并使用Javascript从aspx页面获取图像
我在这里和那里看到了这些问题的各种答案的片段,但我无法让它们中的任何一个起作用 代码的目的是让我可以通过aspx页面从互联网下载图像。因此,我将从Javascript调用aspx页面,该页面应该提供数据,然后将数据输入到图像元素中,但到目前为止还没有骰子 我正在尝试: 在GetHotlink.aspx页面中:如何使用webclient在c#中下载图像并使用Javascript从aspx页面获取图像,c#,javascript,asp.net,C#,Javascript,Asp.net,我在这里和那里看到了这些问题的各种答案的片段,但我无法让它们中的任何一个起作用 代码的目的是让我可以通过aspx页面从互联网下载图像。因此,我将从Javascript调用aspx页面,该页面应该提供数据,然后将数据输入到图像元素中,但到目前为止还没有骰子 我正在尝试: 在GetHotlink.aspx页面中: System.Net.WebClient wc = new System.Net.WebClient(); byte[] data = wc.DownloadData("http://ww
System.Net.WebClient wc = new System.Net.WebClient();
byte[] data = wc.DownloadData("http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg");
Context.Response.Clear();
Context.Response.ContentType = "image/JPEG";
Context.Response.OutputStream.Write(data, 0, data.Length);
Context.Response.Flush();
Context.Response.Close();
Context.Response.End();
在Javascript中:
var url = "GetHotlink.aspx";
var tmptxt = call_genpic(url); // call server with filename and minimum layer value.
var imageObj = new Image();
imageObj.setAttribute('src', 'data:image/jpeg;base64,' + tmptxt);
document.body.appendChild(imageObj);
function call_genpic(url) {
var reqObj = createRequest();
reqObj.onreadystatechange = function () {
if (reqObj.readyState == 4) {
//callback
}
}
reqObj.open("GET", url, false);
reqObj.send(null);
var V = "";
V = reqObj.responseText;
return V;
return(reqObj.responseText);
}
我可以看到,当我调用aspx页面时,我从服务器返回了大量数据,但是我添加到DOM中的图像显示为断开的图像图标。没有达斯维德!我怀疑达斯在这条路上的某个地方使用了错误的格式,或者是使用了错误的标题。有什么想法吗?您正在使用base64数据作为图像源,但没有将响应编码为base64字符串。用于将字节数组转换为字符串,并将其作为字符串而不是二进制数据返回给客户端
此外,您的JavaScript代码看起来也乱七八糟。你为什么一个接一个地有两个报税表。您应该创建图像并在回调中设置其数据(在您有评论的地方)我首先将webclient中的内容保存到一个文件中,然后查看图像是否显示,确保内容正确。然后,如果javascript工作正常,就转到javascript端。@Hammerstein,好主意。我使用filestream和二进制编写器将数据数组转储到一个文件中,结果图像看起来很好。所以我可以说数据数组填充正确。Javascript方面在我看来也不错。当我使用一个表示jpg图像的字符串而不是来自服务器端的数据时,我添加到DOM中的image元素看起来很好。所以这两者之间还是有问题的@Hammerstein将图像保存到文件是一种低效且更复杂的方法。您应该授予服务器上临时文件夹的写入权限,应该有清除临时映像的方法,等等。直接提供数据更好。当然,可能还有其他问题使保存到磁盘成为一个不错的选择,比如缓存或支持不支持base64的浏览器images@Stilgar并不是说它是一个永久性的解决方案,只是作为调试的一个步骤。我同意,保存它将是低效的。谢谢。base64编码是我所缺少的。谢谢你的代码提示。。。清理工作已经过期了!