将文件上传控制文件名传递到文件流

问题描述:

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文件控制..

谢谢你..

使用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

如果您确实需要使用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();