2012-05-11 25 views
1

ファイル名がmysqlにBLOBとして保存されています。 が正常にアップロードされています。今我々はそれを完璧に動作するfronグリッドビュー をダウンロードしたい。しかし問題は、開こうとしたときに をダウンロードした後、ファイル形式のエラーが表示されることです。我々はオフィス文書と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

関連する問題