将文件上传控制文件名传递到文件流
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);
而且应该做的伎俩。
如果您确实需要使用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();
我想,太.. – Leema 2010-08-19 10:45:06
但我需要一个mp3文件的byte []数组存储到数据库在这种情况下我该怎么办呢? – Leema 2010-08-19 11:03:58
嗨thaaaaaanks现在它的工作... – Leema 2010-08-19 11:31:30