文件下载格式不正确
本文关键字:不正确 格式 文件下载 | 更新日期: 2023-09-27 18:19:16
好的,
基本上我已经能够使用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();
}
}
}
}
尝试将application/附加到您的附件类型。例如
Response.contenttype = "application/" + dr["attachmenttype"].ToString();
您需要在响应中添加扩展名/附件类型。AddHeader代码:
Response.AddHeader("Content-Disposition", "attachment;filename='"" + dr["Filename"] + "." + dr["AttachmentType"].ToString());
请试试这个。
谢谢
看起来(虽然我不能确定)保存为filename的值依赖于用户输入文本框(FilenameTB)的内容,而不是磁盘上的文件名称?
如果你看一下postdfile。我想你可以提取扩展名吗?