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文件。 当我执行此操作时,我找不到文件'',如何将上传的文件名从上传文件控件传递到文件流?
答案 0 :(得分: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;
并替换
fs = new FileStream(path, FileMode.Open, FileAccess.Read);
与
var fs = uploadFile.PostedFile.InputStream;
这应该可以解决问题。
答案 1 :(得分:0)
如果您确实需要使用FileStream,那么您需要将FileMode设置为Create而不是Open,因为您没有打开文件,而是创建文件。
fs = new FileStream(path, FileMode.Create);
编辑:但是,正如VinayC所说,SaveAs()为你做了所有努力工作!
编辑:看起来您正在尝试将文件保存到磁盘,然后从文件中读取字节以传递给sql。您只需从FileBytes
控件中获取FileUpload
即可绕过该保存/阅读部分。
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();