当用户在表单上按“保存团队”时,我无法将用户上传的图像保存到我的“徽标”文件中。
为了让你了解应用程序的功能,我提供了screenshot here,按下添加团队后,所有文本框数据都会写入文本文件,我希望图像自动保存到预定义的文件夹“logos”,但每当我按下保存时,我都会收到GDI ++错误。
在阅读了网络上的一些旧线程后,我发现它可能是由文件权限,文件大小,文件名甚至是开放流等一些内容引起的。
以下是我目前用来保存文件的代码,提示错误:
private void btnAddTeam_Click(object sender, EventArgs e)
{
//VALIDATION FOR TEXT FILE AND OTHER STUFF HERE...
//SAVE THE IMAGE FILE
string filePath = picTeamLogo.ImageLocation;
Image tempImage = Image.FromFile(filePath);
tempImage.Save(@"../logos/");
}
如果您正在查看屏幕截图,请不要对“arsenal.png”感到困惑我知道这不是完整的文件路径,它的转换是在另一种方法中处理的,因为只需要编写文件名到文本文件。
如果有人对我出错的地方有任何想法,那么请指出我正确的方向,我刚收到的GDI之类的模糊错误是如此令人头疼!
亚历克斯。
答案 0 :(得分:2)
试试这个方法
public void storeFile(FileUpload File, string dirName)
{
if (!Directory.Exists(MapPath("~/uploads/" + dirName)))
{
Directory.CreateDirectory(MapPath("~/uploads/" + dirName));
}
string saveLocation = MapPath("~/uploads/" + dirName + "/" + Path.GetFileName(File.FileName));
File.SaveAs(saveLocation);
}
答案 1 :(得分:1)
请参阅我之前发布的类似问题的帖子......
A Generic error occurred in GDI+ in Bitmap.Save method
流保持锁定状态 - 您可以将内存流用作临时位置然后保存。
从a构造Bitmap对象或Image对象时 文件,文件在对象的生命周期内保持锁定状态。作为一个 结果,您无法更改图像并将其保存回同一文件 它起源于哪里。 http://support.microsoft.com/?id=814675
string outputFileName = "...";
using (MemoryStream memory = new MemoryStream())
{
using (FileStream fs = new FileStream(outputFileName, FileMode.Create, FileAccess.ReadWrite))
{
tempImage.Save(memory, ImageFormat.Jpeg);
// memory.ToStream(fs) // I think the same
byte[] bytes = memory.ToArray();
fs.Write(bytes, 0, bytes.Length);
}
}
或者替代方法是通过MemoryStream
将图片加载到图片中 - 因此首先不会锁定流...
答案 2 :(得分:1)
那是因为您没有为保存功能指定文件名!
看看这个:
string filePath = picTeamLogo.ImageLocation;
FileInfo fi = new FileInfo(filePath);
Image tempImage = Image.FromFile(fi.FullName);
tempImage.Save(@"../logo/" + fi.Name);
现在它正常运作