2011-10-28 12 views
1

SQLデータベースにBLOBファイルをアップロードします。私はファイルをダウンロードするために私のdownloading.aspx.csにリダイレクトする動的ハイパーリンクを作成します。私はそれをクリックするとBLOBファイルを取得する

、私が取得する唯一のことは、そのようなものです:

*����JFIF,,��ExifMM*� ���(1�2;%+>P?`���7��i��%��NIKON CORPORATIONNIKON D3-��'-��'Adobe Photoshop CS4 Macintosh2010:11:19 21:53:25 9�I�@d!ddGddd+�K�r� (��Ƃ�Έ"�'@�0221�֐����� ���� � ��,��42��42��42�0100����Р�d����J����R�b���� � ��Z @(2010:11:19 20:44:392010:11:19 20:44:39 � ASCII R030100��(�HH����JFIFHH��Adobe_CM��Adobed����* 

これは、このdownloading.aspxの私のPage_Loadのコードです:

protected void Page_Load(object sender, EventArgs e) 
{ 
    string filename = Request["file"].ToString(); 
    var conString = ConfigurationManager.ConnectionStrings["LocalSqlServer"]; 
    string strConnString = conString.ConnectionString; 
    SqlConnection dbConnection = new SqlConnection(strConnString); 
    dynamic queryString = ("SELECT Data FROM Files WHERE Name = '" + filename + "'"); 
    SqlCommand theCommand = new SqlCommand(queryString, dbConnection); 
    dbConnection.Open(); 
    SqlDataReader reader = theCommand.ExecuteReader(); 

    if (reader.Read() && reader != null) 
    { 
     Byte[] bytes; 
     bytes = Encoding.UTF8.GetBytes(String.Empty); 
     bytes = (Byte[])reader["Data"]; 
     Response.BinaryWrite(bytes); 

     reader.Close(); 
    } 

    dbConnection.Close(); 
} 

誰かが理由を教えてもらえます?ありがとうございました。

答えて

5

コンテンツタイプは、あなたがストリーミングされているファイルのタイプに固有である必要があります。画像の場合は、 "image/jpg"のようなものでなければなりません。ヘッダーの場合も同様です。画像の場合は、ファイル名部分の拡張子を "file.jpg"に設定したいと思うかもしれません。 上記のコードは単なる例に過ぎません。

+0

また、.cs、Visual Studioファイル、pdfもダウンロードしたいのですか?どうすればいいですか? それ以外の場合、コードは完全に機能しています。どうもありがとうございます ! – Kiwimoisi

+0

@Emgedユーザーにストリーミングするファイルの種類を知り、コンテンツの配置とコンテンツの種類を適切に設定する必要があります。私のアドバイスは、ファイルタイプをデータベースに保存することで、バイトを分析して検出する必要はありません。 – Icarus

+0

@Emgedあなたのファイルに適切なMIMEタイプを使用するだけです。 http://www.iana.org/assignments/media-types/image/index.html – jbtule

3

バイナリデータを理解できるように、Content-Type、Content-LengthおよびContent-Dispositionヘッダーをブラウザに送信する必要があります。

Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
Response.AddHeader("content-disposition", "attachment; filename=whatever.xlsx"); 
Response.BinaryWrite(yourbytes); 

:あなたは、コンテンツタイプを設定し、なるように、あなたのレスポンスヘッダにコンテンツ処分を追加する必要が

+0

イカルス氏によると、あなたの答えをありがとう、それは私を助けた! – Kiwimoisi

関連する問題