好的,
基本上,我已经能够使用asp.net和c#将文件上传到SQL Server数据库。我可以在浏览器中毫无问题地查看它们,但是当我下载它们时,它们似乎失去了其原始格式,例如Word文档失去了其docx扩展名,您必须选择手动将它们作为Word文档打开。
到目前为止,这是我的代码
//Method used to upload a file to the database protected void UploadBut_Click(object sender, EventArgs e) { Stream inpStream = DocumentsUploadControl.PostedFile.InputStream; BinaryReader br = new BinaryReader(inpStream); Byte[] size = br.ReadBytes ((int)inpStream.Length); using (SqlConnection conn = new SqlConnection("Data Source=conn\\sqlexpress;Initial Catalog=new catalog;Integrated Security=True")) { string sql = "INSERT INTO Attachments(AttachmentReferenceID, AttachmentType, Filename, AttachmentDescription, FileUploadedBy, UploadDate)" + "values (@Reference, @Type, @Filename, @Descr, @UploadedBy, @UploadedDate)"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@Reference", ReferenceDDL.Text.Trim()); cmd.Parameters.AddWithValue("@Type", DocumentsUploadControl.PostedFile.ContentType.ToString()); cmd.Parameters.AddWithValue("@Filename", FilenameTB.Text.Trim()); cmd.Parameters.AddWithValue("@Descr", size); cmd.Parameters.AddWithValue("@UploadedBy", Session["username"].ToString()); cmd.Parameters.AddWithValue("@UploadedDate", DateTime.Now.Date.ToShortDateString()); conn.Open(); cmd.ExecuteNonQuery(); conn.Close(); Response.Redirect("Documents.aspx"); } } } //listener used to download the file protected void lnkDownload_Click(object sender, EventArgs e) { LinkButton lnkbtn = sender as LinkButton; GridViewRow gvrow = lnkbtn.NamingContainer as GridViewRow; int fileId = Convert.ToInt32(DocumentsGridView.DataKeys[gvrow.RowIndex].Value.ToString()); using (SqlConnection conn = new SqlConnection("Data Source=conn\\sqlexpress;Initial Catalog=new catalog;Integrated Security=True")) { string sql = "SELECT AttachmentReferenceID, AttachmentType, Filename, AttachmentDescription, FileUploadedBy, UploadDate FROM Attachments WHERE AttachmentID=@ID"; using (SqlCommand cmd = new SqlCommand(sql, conn)) { cmd.Parameters.AddWithValue("@ID", fileId); conn.Open(); SqlDataReader dr = cmd.ExecuteReader(); if (dr.Read()) { Response.ContentType = dr["AttachmentType"].ToString(); Response.AddHeader("Content-Disposition", "attachment;filename=\"" + dr["Filename"] + "\""); Response.BinaryWrite((byte[])dr["AttachmentDescription"]); Response.End(); conn.Close(); } } } }
您需要将扩展名/附件类型添加到Response.AddHeader代码中,例如:
Response.AddHeader("Content-Disposition", "attachment;filename=\"" + dr["Filename"] + "." + dr["AttachmentType"].ToString());
请试试这个。
谢谢