我正在尝试将图像从Web URL保存到本地ASP.Net项目文件夹“〜Content / Images”
最初我是这样保存图像的:
imgUrl = "http://example.com/myimage.jpg";
imgName = Path.GetFileName(imgUrl);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(imgUrl);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
System.Drawing.Image img = System.Drawing.Image.FromStream(response.GetResponseStream());
img.Save(Server.MapPath("~/Content/Images/" + imgName));
但是我的单元测试以NullReferenceException
方法在Server object
上的Server.MapPath()
失败了。
然后我尝试了另一种保存图像的方法。
imgUrl = "http://example.com/myimage.jpg";
imgName = Path.GetFileName(imgUrl);
byte[] data;
using (WebClient client = new WebClient())
data = client.DownloadData(imgUrl);
if (data != null)
{
MemoryStream ioStream = new MemoryStream();
ioStream = new MemoryStream(data);
using (Stream originalBinaryDataStream = ioStream)
{
var path = System.IO.Path.Combine("~/Content/Images/" + imgName);
Image image = Image.FromStream(originalBinaryDataStream);
image.Save(path, System.Drawing.Imaging.ImageFormat.Jpeg);
}
}
但是单元测试再次失败。这次出现System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
错误。
顺便说一句,该应用程序运行良好。仅当我正在运行单元测试时,才会出现此问题。
有人有解决此问题的想法吗?
答案 0 :(得分:0)
在单元测试中,您将必须伪造或模拟HttpContext。
答案 1 :(得分:0)
从文件构造位图对象或图像对象时,文件在对象的生存期内保持锁定状态。因此,您无法更改图像并将其保存回其原始位置。 http://support.microsoft.com/?id=814675
您可以尝试以下操作:
obj.quantity