Я занимаюсь разработкой веб-приложения, которое вызывает веб-службы, разработанные третьей стороной, для отправки / получения данных из клиентской базы данных. Я создаю приложение, используя ASP.NET 3.5 C #.
Способ, которым они предоставляют мне изображения, находится в формате BLOB. Я называю их метод, и в ответ я получаю DataSet с двумя полями "logo_name" и "logo", который является полем BLOB.
Что я хочу сделать, это: сохранить изображение локально на диске (чтобы свести к минимуму количество обращений к их базе данных в будущем).
Я поиграл с несколькими различными способами сделать это, но, похоже, не могу правильно сохранить изображение. Мне удалось создать файл в папке с правильным именем, но если я пытаюсь просмотреть изображение, оно не работает.
Я надеялся, что кто-нибудь может дать мне пример кода, чтобы показать, как сохранить поле BLOB на локальный диск?
Вот код, который у меня сейчас есть
public static class ProductImages
{
public static string GetSchoolLogo(string schoolID, string printCodeID)
{
int v_length = 0;
string v_file_name = "";
byte[] v_file_data = null;
try
{
//Declare Web Service Variables
P_SERVICE.Service ldeService = new P_SERVICE.Service();
//Authentication Header
ldeService.AuthHeaderValue = CGlobal.GetAuthHeader(System.Web.HttpContext.Current.Session);
P_SERVICE.CDataResultOfDataSet ldeResult = null;
DataSet ds = new DataSet();
ldeResult = ldeService.GetItemLogo(schoolID, printCodeID);
ds = ldeResult.Value;
if (ds.Tables[0].Rows.Count > 0)
{
v_file_data = StrToByteArray(ds.Tables[0].Rows[0]["logo"].ToString().TrimEnd());
v_file_name = ds.Tables[0].Rows[0]["logo_name"].ToString().TrimEnd();
v_length = Convert.ToInt32(v_file_data.Length);
// Load the file in the Memory Stream
MemoryStream ms = new MemoryStream(v_file_data, 0, v_file_data.Length);
ms.Write(v_file_data, 0, v_file_data.Length);
// Open the file stream in ordre to save on the local disk
string path = HttpContext.Current.Server.MapPath("~/_imagecache/schoolLogos/").ToString();
FileStream fs = File.OpenWrite(path + schoolID + "/" + v_file_name);
fs.Write(v_file_data, 0, v_file_data.Length);
fs.Close();
// Return True if no errors occured
return "~/_imagecache/schoolLogos/" + schoolID + "/" + v_file_name;
}
else
return "~/images/noPhoto.gif";
}
catch (Exception ex)
{
throw new Exception(ex.Message.ToString());
//return "~/images/noPhoto.gif";
}
}
// C# to convert a string to a byte array.
public static byte[] StrToByteArray(string str)
{
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
return encoding.GetBytes(str);
}
}
}
Когда я получаю тип возвращаемых данных, он возвращает System.String
Type t = ds.Tables[0].Rows[0]["logo"].GetType();
HttpContext.Current.Trace.Warn(t.FullName);
Спасибо