|
|
upload image ไม่ได้ แจ้งข้อความว่า a generic error occurred in GDI+ เกิดจากอะไร มีวิธีแก้ปัญหาอย่างไร ครับ |
|
|
|
|
|
|
|
เป็นการทำงานบน web browser ครับ
การทำงานประมาณว่า ถ่ายรูปแล้ว ภาพที่ถูกถ่ายอัพโหลดไปยังเซิฟเวอร์ ที่ path นึง
(set perrmission ก็แล้วเป็น full control)
เลยอยากทราบวิธีแก้ครับ หรือปัญหาที่แจ้ง a generic error occurred in GDI+ มันเกิดจากอะไรได้บ้าง
*แจ้งก่อนว่า พอทำงานที่ localhost เทสกับเครื่องเราเอง ภาพก็อัพมาที่ path ได้ปกติดีครับ แต่พอโยนไฟล์ขึ้น window server(iis) ก็เป็นอย่างที่ว่าครับ*
โค้ดหลังบ้าน ประมาณนี้ครับ
Code (C#)
public void SaveImage(string RowNumberSubject, string RowNumberClip)
{
string myImageName = "";
string UserProfilePath = "";
try
{
for (int i = 0; i < ImageStringArray.Length; i++)
{
if (ImageStringArray[i].ToString() == "")
{
break;
}
//--- ตั้งชื่อรูปใช้ รหัสสมาชิก + เลขที่ใบสั่งซื้อ + รหัสวิชา + คลิปที่ + รูปที่
//--- 00003 + PU00004 + 0001 + 1 + 1
myImageName = "";
myImageName = UserID + dsPurchase.Tables[0].Rows[Convert.ToInt16(RowNumberSubject) - 1]["Purchase_Number"].ToString();
myImageName = myImageName + dsPurchase.Tables[0].Rows[Convert.ToInt16(RowNumberSubject) - 1]["Subject_Code"].ToString() + Convert.ToInt16(RowNumberClip);
myImageName = myImageName + "-" + Convert.ToString(i + 1) + ".jpeg";
UserProfilePath = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\" + myImageName;
//--- Base64 String => Byte Array => Image
//--- Convert Base64 String To Byte Array
byte[] imageBytes = System.Convert.FromBase64String(ImageStringArray[i]);
//--- Convert byte[] to Image
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream, true);
//--- Save Image To User Profile Path (Local Drive like C:\user1\Documents...)
image.Save(UserProfilePath , ImageFormat.Jpeg);
//--- Upload Image File To Server # 1
//File.Copy(UserProfilePath, Server.MapPath("~/FileUpload/" + myImageName));
//--- Upload Image File To Server # 2
image.Save(HttpContext.Current.Server.MapPath("~/FileUpload/" + myImageName));
//image.Save("~\\FileUpload\\" + myImageName, ImageFormat.Jpeg);
}
}
catch (Exception ex)
{
String excep = ex.Message;
Alert("Can Not Uploaded Image..." + excep);
}
Tag : Web (ASP.NET), WebServices, C#, C, Windows
|
ประวัติการแก้ไข 2020-04-01 11:34:34 2020-04-01 11:35:39 2020-04-01 13:22:04
|
|
|
|
|
Date :
2020-04-01 11:11:15 |
By :
boss1853 |
View :
1692 |
Reply :
7 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1. เปลี่ยนเป็น Server.MapPath("./FileUpload/" + myImageName)); หรือ
2. Dispose() + Garbage Collector หลัง save
3. หรือลองทั้งสองอย่าง
|
|
|
|
|
Date :
2020-04-01 16:33:23 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบที่ 2
Code (C#)
...
image.Save(...);
image.Dispose();
GC.Collect();
เพิ่งสังเกตว่า image.Save() มีสองอัน...เมื่อโยนขึ้น iis ลองคอมเมนต์บรรทัดนี้ครับ
Code (C#)
//image.Save(UserProfilePath , ImageFormat.Jpeg);
|
|
|
|
|
Date :
2020-04-02 12:06:04 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แจ่ม
ไม่ทราบว่าวิธีที่แก้ปัญหาของ จขกท.ได้ คือแบบไหนครับ...รบกวนแชร์เพื่อนสมาชิกท่านอื่นด้วย
|
|
|
|
|
Date :
2020-04-02 15:41:53 |
By :
PhrayaDev |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 5 เขียนโดย : PhrayaDev เมื่อวันที่ 2020-04-02 15:41:53
รายละเอียดของการตอบ ::
เป็นวิธีการเข้าถึงใช้สิทธิโดยตรงเลยครับผม
ดูวิธีจากเว็บนี้ครับ
https://stackoverflow.com/questions/9108399/how-to-grant-full-permission-to-a-file-created-by-my-application-for-all-users
และกำหนดพาทที่ชัดเจนของโฟร์เดอร์ของเราครับ
Code (C#)
public void SaveImage(string RowNumberSubject, string RowNumberClip)
{
string myImageName = "";
string UserProfilePath = "";
try
{
for (int i = 0; i < ImageStringArray.Length; i++)
{
if (ImageStringArray[i].ToString() == "")
{
break;
}
//--- ตั้งชื่อรูปใช้ รหัสสมาชิก + เลขที่ใบสั่งซื้อ + รหัสวิชา + คลิปที่ + รูปที่
//--- 00003 + PU00004 + 0001 + 1 + 1
myImageName = "";
myImageName = UserID + dsPurchase.Tables[0].Rows[Convert.ToInt16(RowNumberSubject) - 1]["Purchase_Number"].ToString();
myImageName = myImageName + dsPurchase.Tables[0].Rows[Convert.ToInt16(RowNumberSubject) - 1]["Subject_Code"].ToString() + Convert.ToInt16(RowNumberClip);
myImageName = myImageName + "-" + Convert.ToString(i + 1) + ".jpeg";
UserProfilePath = Environment.GetEnvironmentVariable("USERPROFILE") + "\\Documents\\" + myImageName;
//--- Base64 String => Byte Array => Image
//--- Convert Base64 String To Byte Array
byte[] imageBytes = System.Convert.FromBase64String(ImageStringArray[i]);
//--- การ Convert byte[] to Image
//--- 1.ทำ memoryStream กับ ข้อมูลใน Array "imageBytes" ซึ่งเป็น รหัส Base64String
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
//--- 2.สร้าง Image จาก memoryStream
System.Drawing.Image image = System.Drawing.Image.FromStream(memoryStream, true);
//--- Save Image To User Profile Path (Local Drive like C:\user1\Documents...)
//--- กำหนด ชนิด Image เป็น Jpeg และบันทึกลง Local Drive In Profile Folder
//image.Save(UserProfilePath , ImageFormat.Jpeg);
//--- Upload Image File To Server # 1
//File.Copy(UserProfilePath, Server.MapPath("~/FileUpload/" + myImageName));
bool AccessFolder = GrantAccess(@"path ที่อยู่");
if (AccessFolder)
{
//--- Upload Image File To Server # 2
image.Save(HttpContext.Current.Server.MapPath("~/FileUpload/" + myImageName), ImageFormat.Jpeg);
//image.Save("~\\FileUpload\\" + myImageName, ImageFormat.Jpeg);
}
else { Alert("Can Not Access To Save Image..."); }
}
}
ประมาณนี้ครับ โค้ดที่แก้
|
|
|
|
|
Date :
2020-04-02 15:51:11 |
By :
boss1853 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 02
|