2013-05-15 122 views
1

所以我有這樣的代碼:圖像插入數據庫C#

if ((uplImage.FileName != "")) 
{ 
    byte[] raw = new byte[10000]; 

    //to allow only jpg gif and png files to be uploaded. 
    string extension = Path.GetExtension(uplImage.PostedFile.FileName.ToUpper()); 
    if (((extension == ".JPG") || ((extension == ".GIF") || (extension == ".PNG")))) 
    { 

     DALBio bio = new DALBio(); 

     FileStream fs = new FileStream(uplImage.PostedFile.FileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); 
     fs.Read(raw, 0, System.Convert.ToInt32(fs.Length)); 

     bio.PlayerID = Session["playerID"].ToString(); 
     bio.Pending = 'Y'; 
     bio.Photo = raw; 
     DALBio.insertImage(bio); 
    } 
} 

當我嘗試這一點,流不讀取圖像。 raw永遠不會獲得圖像。它保持空白,並在執行存儲過程時被捕獲,並說我從未傳過圖像。我相信代碼很好。我不知道爲什麼我無法將圖像存入我的字節數組中。

+0

的代碼似乎是正確的。你確定10000字節就夠了嗎?我試過了,它工作正常。不得不將我的小測試圖片的字節數提高到400 000。 –

+0

考慮在數據庫中存儲文件的文件名引用,並將實際文件存儲在其他位置。 –

+0

我的圖像實際上只有60字節大,當我試圖說只是字節[]原料,然後幾個留置後來使用原料,它只是跳過原料。所以這就是爲什麼我給它一個大小和實例化它更早 – dwarf

回答

0

您可以創建/定義raw陣列

 FileStream fs = new FileStream(uplImage.PostedFile.FileName, 
         FileMode.OpenOrCreate, FileAccess.ReadWrite, 
          FileShare.Read); 

    raw = new byte[fs.Length]; 

// same code as above.. 

您也可以嘗試類似的代碼

 System.IO.Stream myStream; 
     Int32 fileLen; 

     // Get the length of the file. 
     fileLen = uplImage.PostedFile.ContentLength; 


     // Create a byte array to hold the contents of the file. 
     Byte[] input = new Byte[fileLen]; 

     // Initialize the stream to read the uploaded file. 
     myStream = uplImage.FileContent; 

     // Read the file into the byte array. 
     myStream.Read(input, 0, fileLen); 
     // input will hold the byte array 
+0

無論什麼原因,使用這個例子的作品。不是我只需要從varchar轉換爲varbinary,因爲我的存儲過程不像隱式轉換 – dwarf

+0

代碼是從msdn http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.fileupload。 postedfile.aspx – Amitd

0

我做的是我得到的ByteArray

public Byte[] GetArrayFromFile(string path) 
{ 
    Byte[] data = null 

    FileInfo fileInf = new FileInfo(path); 
    long numBytes = fileInf.Length; 

    FileStream fStream = nw FileStream(path, FileMode.Open, FileAccess.Read); 

    BinaryReader bReader = new BinaryReader(fStream); 

    data = bReader.ReadBytes((int)numBytes); 
    return data; 
} 

然後在數據庫中存儲正確使用實體框架(它應該,如果你的DAL插入您的正確的對象在數據庫中工作)。

+2

另請注意'FileStream'是'IDisposable',所以你可能想要處理它或者把它放在'using'塊中。 –

+0

這仍然給我同樣的問題。使用所提供的答案中的代碼,數據保持大小爲0,沒有任何數據寫入它。 – dwarf

+0

你是否設法獲得numBytes的值? –