如果我試圖解釋爲什麼我需要做我想做的事情需要很長時間,但基本上是這樣的:我有FileUpload控件供用戶選擇一個Jpeg文件,我做了上傳,之後我想將該文件轉換爲字節並將其用作Image控件的源代碼。BinaryReader.ReadBytes轉換爲字符串時返回垃圾
我的代碼是這一個:
string fileName = Server.MapPath("~/TempImages") + @"\foto.jpg";
fileUpload1.SaveAs(fileName);
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader binaryReader = new System.IO.BinaryReader(fs);
long byteLength = new System.IO.FileInfo(fileName).Length;
byte[] buffer = binaryReader.ReadBytes((Int32)byteLength);
fs.Close();
fs.Dispose();
string valor = System.Text.Encoding.UTF8.GetString(buffer);
img.ImageUrl = "data:image/jpg;base64," + valor;
的字節數組正在尋找好的,但是當我將其轉換爲字符串,它充滿了無法識別的字符,我還有一個網頁,我做同樣的事情,但不是從文件中獲取字節我從MySql數據庫獲取並使用相同的System.Text.Encoding.UTF8.GetString
,它可以解決問題。
UPDATE 至於問,這是從MySQL數據庫中檢索,當我使用的代碼:
DataView dv = (DataView)SqlDataSource3.Select(DataSourceSelectArguments.Empty);
byte[] buffer = (byte[])dv.Table.Rows[0]["BIN_FOTO"];
string valor = System.Text.Encoding.UTF8.GetString(buffer);
img.ImageUrl = "data:image/jpg;base64," + valor;
的選擇這個SqlDataSource3的是一個簡單的Select BIN_FOTO from temp_image
。我存儲在數據庫中該值從攝像頭捕捉WPF程序代碼中,我使用的圖像拍攝的攝像頭是轉換:
private string ImageToBase64String(System.Drawing.Image imageData, ImageFormat format)
{
string base64;
MemoryStream memory = new MemoryStream();
imageData.Save(memory, format);
base64 = System.Convert.ToBase64String(memory.ToArray());
memory.Close();
memory.Dispose();
return base64;
}
然後我的base64
變量保存到數據庫中。
希望這澄清了我的問題
解釋的圖像字節數組的字符串是不會給你任何可理解的東西。看看你的圖像如何存儲在MySql中將會很有趣。有可能在保存或檢索中進行一些轉換。 –
已更新它以顯示我如何保存到MySql。 –