将位图文件作为 jpg 保存到服务器
本文关键字:保存 服务器 jpg 位图 文件 | 更新日期: 2023-09-27 18:35:14
我正在尝试将位图文件保存到服务器上的jpg,但无法这样做。我可以将其保存到流中并显示它。但是一旦我尝试将其保存到文件,它就没有任何作用。下面是我的代码,有人可以告诉我为什么它不保存到文件中:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)
{
string jsonStr = Request.Form["output"];
var sigToImg = new SignatureToImage();
var signatureImage = sigToImg.SigJsonToImage(jsonStr);
Bitmap bm2 = signatureImage as Bitmap;
Bitmap bm3 = new Bitmap(bm2);
Response.ContentType = "image/jpeg";
//bm3.Save(Response.OutputStream, ImageFormat.Jpeg); If i use this it displays the image fine
System.IO.FileStream fs = System.IO.File.Open(Server.MapPath("~/Images") + "MyImage.jpg", FileMode.Create);
bm3.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
bm2.Dispose();
bm3.Dispose();
Response.End();
}
}
确保除了释放位图实例之外,还关闭了要写入的文件流(调用 bm3.Save()
之后):
fs.Close();
这会将流刷新到磁盘,并确保图像实际包含在文件中。
---编辑---
正如评论中所显示的那样,这是由于Server.MapPath
解析到布拉德没想到的目录。
我建议将保存方法放在try/catch块中:
try
{
bm3.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch(Exception e)
{
// Check for errors here
}
保存可能会引发两种类型的异常:
ArgumentNullException
文件名或格式为空。
ExternalException
图像以错误的图像格式保存
我怀疑第一个正在发生。