2

私は、c# コードベースを使用して zip ファイルをダウンロードする必要がある c#.net アプリケーションを使用しています。ファイルをダウンロードするには、次のコードを使用しています。

Response.ContentType = "application/zip"                       
Response.AppendHeader("Content-Disposition", string.Format("attachment; filename = {0}", System.IO.Path.GetFileName(sZipFileName)));
Response.TransmitFile(sZipFilePath);
HttpContext.Current.ApplicationInstance.CompleteRequest();

zip ファイルは送信されますが、ダウンロード後に zip ファイルを開こうとすると、「ファイルを開けません: ファイルは有効なアーカイブではないようです」というエラーが表示されます。

どこが間違っているのか、zip ファイルを取得してエラーなく解凍する方法を教えてください。

前もって感謝します

4

8 に答える 8

5

スニペットが機能しない理由は正確にはわかりませんが、アプリケーションで同じことを行うために使用しているコードを次に示します。それが役に立てば幸い。

var updateFile = new FileInfo("path/to/file");
Response.ContentType = "application/octet-stream";
Response.AddHeader("content-disposition", "attachment;filename=\"" + Path.GetFileName(updateFile.FullName) + "\"");
Response.AddHeader("content-length", updateFile.Length.ToString());
Response.TransmitFile(updateFile.FullName);
Response.Flush();
于 2011-02-04T13:36:07.040 に答える
1

Response.End()スクリプトの最後に追加してみてください。

于 2011-02-04T13:41:46.053 に答える
0

Response.WriteFile(sZipFilePath);代わりに試す

于 2011-02-04T13:35:39.493 に答える
0

流れるコードをテストしましたが、動作するので共有します。私が行った必須のことの 1 つは、" Response.Flush();" を使用することです。

private void DownloadCandidateDocument()
{
    Response.Clear();
    Response.ClearContent();
    Response.ClearHeaders();
    var buffer = new byte[] {};

    buffer = get you byte array here from service or file system

    if (buffer.Length > 0)
    {
        Response.ContentType = "application/zip";
        Response.BinaryWrite(buffer);

        var fileName = "myzipfile";
        Response.AddHeader("content-disposition",
            string.Format(@"attachment;filename=""{0}""", fileName));

        Response.Flush();    
    }
}
于 2013-12-12T23:07:11.963 に答える
0

サーバー上のファイルを圧縮していますか、それとも圧縮済みのファイルをダウンロードしていますか? jscriptを使用している場合、圧縮されたファイルを返す際に何か問題があると思います。そうでない場合は、圧縮されているファイル名を正しく返していません。

私もこのようにして、zipファイルを作成してからダウンロードしました。私はc#、jscript、およびasp.netを使用しました。

そしてそれは私にとって完璧に機能しました。ファイル/ファイルをjscriptファイルに渡し、jscriptがファイルを圧縮するメソッドを呼び出します。サーバーで圧縮が完了すると、サーバーはそれをクライアントに返し、自動的にダウンロードを開始します。

于 2011-02-04T14:11:11.873 に答える
0

どのマシンを使用しているかはわかりませんが、Vista より前の Windows リリースでは zip ファイルに FAT32 エンコーディングが使用され、Vista Microsft は NTFS をファイル形式として使用し始めました。ユーザーがXP OSを使用していて、win7でアーカイブを作成していたときに非常によく似た状況に直面したため、アーカイブファイル形式を確認してください(エラーメッセージは投稿したものと同じでした). よろしくお願いします、

于 2011-09-12T16:08:28.717 に答える
0

試す:

HttpContext.Current.Response.ClearContent();
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=" + "test.zip");
HttpContext.Current.Response.ContentType = "application/zip";
HttpContext.Current.Response.BinaryWrite(ba);
HttpContext.Current.Response.End();

ba は、zip ファイルを表すバイト配列です。

于 2011-02-04T13:38:56.450 に答える
0

私はこれを使用しています:

Response.ContentType = "application/zip" ;
Response.AddHeader("content-disposition", "attachment; filename=" + HttpUtility.UrlEncode(System.IO.Path.GetFileName(path)));
Response.WriteFile(path);
Response.End();

ここで、変数パスは (ローカル) ファイルのフル パスです。

于 2011-02-04T13:39:39.953 に答える