如何使用asp.net

时间:2016-11-08 06:34:17

标签: c# asp.net webforms

我有一个asp.net webform应用程序。我想要一个下载音乐的按钮,所以我写下面的代码块:

protected void Button1_Click(object sender, EventArgs e)
{
    string id_new;
    id_new = Session["selectedmusicID"].ToString();
    DataTable dt2 = new DataTable();
    dt2 = blm.selectMusic("sel_music", Convert.ToInt32(id_new));
    string test = dt2.Rows[0][9].ToString();
    Response.ContentType = "application/mp3";
    Response.AddHeader("Content-Disposition", dt2.Rows[0][9].ToString());
    Response.TransmitFile(Server.MapPath( dt2.Rows[0][9].ToString()));
    Response.End();
}

当我运行此代码并单击按钮时,它会下载music.aspx页面而不是mp3文件。我不知道我的错误是什么。 有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

最后我解决了我的问题,你可以在下面的代码中看到... 首先,我在数据库中创建了一个名为MusicByte的列到我的音乐表。我通过文件上传存储了每个音乐的数据......

string id_new;
id_new = Session["selectedmusicID"].ToString();
DataTable dt2 = new DataTable();
dt2 = blm.selectMusic("sel_music", Convert.ToInt32(id_new));
string test = dt2.Rows[0][9].ToString();
string filename = test.Substring(9).Replace(" " , "").Replace(".mp3" , ".MP3");
byte[] buffer = (byte[])(dt2.Rows[0][10]);
Response.ContentType = "audio/mpeg";
Response.AddHeader("Content-Disposition", "Attachment;filename=" + filename);
byte[] datablock = new byte[0x1000];
long filesize;
int bytesread;
long totalsbytesread = 0;
using (Stream st = new MemoryStream(buffer))
        {
            filesize = st.Length;
            while (totalsbytesread < filesize)
            {
                if (Response.IsClientConnected)
                {
                    bytesread = st.Read(datablock, 0, datablock.Length);
                    Response.OutputStream.Write(datablock, 0, bytesread);
                    Response.Flush();
                    totalsbytesread += bytesread;
                }
            }
        }
        Response.End();

删除文件名中的空格并将.mp3重新复制到.MP3非常有用。此外,您的视频中的视频帮助我:上传和下载文件到/从SQL Server数据库下载