2012-05-11 42 views
1

我们正在将文件存储为mysql中的文件名也是。也就是 上传它的工作正常。现在我们想要从gridview 下载它,这也是完美的。但问题是,在我们尝试打开它时,下载了 后显示文件格式错误。我们只处理办公文档和pdf只有 。使用Aspx从Mysql下载BLOB文件

try 
{ 
    int did = Convert.ToInt32(e.CommandArgument); 
    DataSet path = download.GetresourcePath(did); 
    byte[] fileFromDatabase = null; 
    DataRow row = path.Tables[0].Rows[0]; 
    fileFromDatabase = (byte[])row["UPLFILE"]; 
    string filename = (string)row["FILENAME"]; 

    if (fileFromDatabase.Length > 0) 
    { 
    Response.Clear(); 
    Response.Buffer = true; 
    Response.ContentType = string.Format("application/{0}", 
     Path.GetExtension(filename).Substring(1)); 
    Response.AddHeader("content-disposition", 
     string.Format("attachment;filename={0}", filename)); 
    Response.BinaryWrite(fileFromDatabase); 
    Response.Flush(); 
    Response.End(); 
    } 
} 
catch (Exception) 
{ 
    return; 
} 
  1. 在这里所做的是我们得到它从网格视图文件的ID。
  2. filename是我们从数据库中获得的文件的名称。
  3. fileFromDatabase是Mysql的BLOB文件,我们将它转​​换为Byte。

所以,任何人都可以告诉我我做错了什么?

回答

0

我建议您不要将文件存储为BLOB。如果没有别的表现,这对性能来说是非常糟糕的。

您应该将文件存储在服务器的文件系统中,并在数据库中存储该文件的路径。

+0

文件大小最大为4MB。你可以告诉我为什么它显示文件格式错误。 – Aaraadhana

1

尝试删除标题条目并手动添加它。

Response.Clear(); 
Response.ClearHeaders(); 
Response.AddHeader("Content-Type", "application/octet-stream"); 
Response.AddHeader("Content-Length", fileFromDatabase.Length.ToString()); 
Response.AddHeader("Content-Disposition",string.Format("attachment;filename={0}", filename)); 
Response.BinaryWrite(fileFromDatabase); 
Response.Flush(); 
Response.End(); 
+0

让我试试... – Aaraadhana

+0

对不起,它已经下载后打开文件同样的错误。 – Aaraadhana

+0

@Aaraadhana - 可能是文件内容保存不正确。尝试将BLOB字段的内容保存到磁盘文件中并将其打开。 – adatapost