首页 文章

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

提问于
浏览
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文件..当我执行这个时我找不到文件''如何将上传的文件名从上传文件控件传递到文件流..

谢谢..

2 回答

  • 0

    使用 fileUpload.PostedFile.FileName 还最好检查是否有使用fileUpload.HasFile属性上传的文件 . 您还可以通过检查fileUpload.PostedFile.ContentLength> 0来防止零长度文件 .

    Edited - just realized what wrong you are doing... 您需要使用fileUpload.PostedFile.SaveAs方法在磁盘上保存上载的文件内容 . 上面的文件名属性将在客户端计算机上为您提供文件名,但该文件将不存在于服务器上 . 您需要将它保存在服务器上的任何位置 . 例如,

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

    这会将上载的文件放在服务器上的temp目录中 . 您还可以使用PostedFile.InputStream来读取文件内容 .

    fs = new FileStream(path, FileMode.Open, FileAccess.Read); 永远不会工作,因为Web服务器计算机上不存在该文件 .

    Edit: after you put the sample code 删除 FileStream fs = null; 并替换

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

    var fs = uploadFile.PostedFile.InputStream;
    

    这应该可以解决问题 .

  • 2

    如果你真的需要使用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();
    

相关问题