2

一部の方に技術的な質問があります。

基本的に、私は主にFirefoxでアプリケーションをテストしてきました。アプリケーションには、ユーザーがSQLサーバーデータベースからファイルをダウンロードできるダウンロード機能があります。問題は、Internet Explorer でファイルをダウンロードすると、Word、Access などの Microsoft ファイルを除いて、すべてのファイルの拡張子が失われることです。Firefox には、ビットマップ以外の問題はありません...

これが私のコードです。ありがとう

    //Download attachment file
    protected void AttachmentDLBut_Click(object sender, EventArgs e)
    {
        //set the ID for the selected row
        var ID = Request.QueryString["Id"];
        using (SqlConnection conn = new SqlConnection("******"))
        {
            string sql = "SELECT FileType, Filename, Description FROM NetworkEquipment WHERE NetworkEquipmentID = '" + ID + "'";

            using (SqlCommand cmd = new SqlCommand(sql, conn))
            {
                //cmd.Parameters.AddWithValue("@ID", AttachmentDDL.SelectedItem.Value);
                conn.Open();

                SqlDataReader dr = cmd.ExecuteReader();

                try
                {
                    //if there is an attachment... download it
                    if (dr.Read())
                    {
                        Response.Clear();
                        Response.ContentType = dr["FileType"].ToString();
                        Response.AddHeader("Content-Disposition", "attachment;filename=\"" + dr["Filename"].ToString());
                        Response.BinaryWrite((byte[])dr["Description"]);
                        Response.End();

                        conn.Close();
                    }
                }
                catch (SqlException sqlex) { MessageBox.Show("Sorry, an unexpected error has occurred while downloading this file. Error: " + sqlex); }
                catch (Exception ex) { MessageBox.Show("Sorry, an unexpected error has occurred while downloading this file. Error: " + ex); }

                //else nothing happens
            }
        }
    }
4

2 に答える 2

4

F12 開発者ツールまたは FireBug などを使用して、サーバーから実際に何が送信されているかを確認します。この場合、次のようになります。

Content-Disposition: attachment;filename="filename.ext

サーバーは、デフォルトでこれまたは類似のものを送信する場合もあります。

Content-Type: text/html

まず、ファイル名の後の引用符を閉じる必要があります。セミコロンの後のスペースも推奨されます。また、紛らわしい文字や不正な文字が含まれていないことを確認するために、ファイル名をクリーンアップする必要があります。少なくとも、二重引用符を取り除くか引用する必要があります。

次に、Content-Type ヘッダーを追加する必要があります。チートは設定することです

Content-Type: application/octet-stream 

これにより、ブラウザはファイル拡張子に基づいて推測します。

于 2013-07-04T09:49:01.827 に答える