2010-08-19 90 views
0

SqlConnection conn = new SqlConnection(「Data Source = DDPRO8-WIN7X86 \ SQLEXPRESS; Initial Catalog = mp3bytes; Persist Security Info = True; Integrated security = true; User ID =; Password = ;「); SqlCommand cmd = null; SqlParameter param = null; cmd = new SqlCommand(「INSERT INTO mp3_bytes(songs)」+「Values(@songs)」,conn); FileStream fs = null;將文件上傳控制文件名傳遞到文件流

string path = fileUpload.FileName; 
    fs = new FileStream(path, FileMode.Open, FileAccess.Read); 

    Byte[] song = new Byte[fs.Length]; 
    fs.Read(song, 0, song.Length); 
    fs.Close(); 
    param = new SqlParameter("@songs", SqlDbType.VarBinary, song.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, song); 
    cmd.Parameters.Add(param); 
    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 

其中的FileUpload是文件上傳控制..我上傳MP3文件.. 當我執行此我越來越找不到文件「」我怎麼可以通過上傳的文件名從上傳到FILESTREAM文件控制..

謝謝你..

回答

2

使用fileUpload.PostedFile.FileName 此外它能夠更好地檢查是否存在已使用fileUpload.HasFile財產上傳過任何文件。您也可以防範零頁長度的文件通過對fileUpload.PostedFile.ContentLength> 0

編輯檢查 - 剛剛意識到 上傳的文件內容需要在磁盤上保存的由你自己做錯了什麼,你正在做的...使用fileUpload.PostedFile.SaveAs方法。上面的文件名屬性會給你在客戶端機器上的文件名,但該文件不會存在於服務器上。您需要將其保存在服務器上的任何位置。例如,

var path = Path.Combine(tempDirectory, fileUpload.PostedFile.FileNam); 
fileUpload.PostedFile.SaveAs(path); 

這會將上傳的文件放在服務器上的臨時目錄中。您也可以使用PostedFile.InputStream來讀取文件內容。

fs = new FileStream(path, FileMode.Open, FileAccess.Read);將永遠不會工作,因爲Web服務器上不存在文件。

編輯:你把示例代碼後 刪除FileStream fs = null;和 與

var fs = uploadFile.PostedFile.InputStream; 

更換

fs = new FileStream(path, FileMode.Open, FileAccess.Read); 

而且應該做的伎倆。

+0

我想,太.. – Leema 2010-08-19 10:45:06

+0

但我需要一個mp3文件的byte []數組存儲到數據庫在這種情況下我該怎麼辦呢? – Leema 2010-08-19 11:03:58

+0

嗨thaaaaaanks現在它的工作... – Leema 2010-08-19 11:31:30

0

如果您確實需要使用FileStream,那麼您需要將FileMode設置爲Create而不是Open,因爲您不打開文件,而是創建一個。

fs = new FileStream(path, FileMode.Create); 

編輯:但是,正如VinayC所說,SaveAs()爲您做了所有的辛苦工作!

編輯:它看起來像你試圖將文件保存到磁盤,然後從文件中讀取字節傳遞給SQL。您只需從FileUpload控制中獲取FileBytes即可繞過該保存/讀取部分。

SqlConnection conn = new SqlConnection("Data Source=DDPRO8-WIN7X86\\SQLEXPRESS;Initial Catalog=mp3bytes;Persist Security Info=True;Integrated security=true; User ID=; Password=;"); 
SqlCommand cmd = null; 
SqlParameter param = null; 
cmd = new SqlCommand(" INSERT INTO mp3_bytes (songs) " + " Values (@songs) ", conn); 

param = new SqlParameter("@songs", SqlDbType.VarBinary, fileUpload.FileBytes.Length, ParameterDirection.Input, false, 0, 0, null, DataRowVersion.Current, fileUpload.FileBytes); 
cmd.Parameters.Add(param); 
conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close();