2

ユーザーのセッションからファイルのリストを圧縮し、それをユーザーのブラウザーにストリーミングしてダウンロードするために使用しているこの関数があります。

public static void DownloadAllPhotos()
{
    HttpContext.Current.Response.AddHeader(
        "Content-Disposition", "attachment; filename=Photos.zip");
    HttpContext.Current.Response.ContentType = "application/zip";

    List<string> photos= new List<string>();

    if (HttpContext.Current.Session != null && 
        HttpContext.Current.Session["userPhotos"] != null)
    {
        photos = (List<string>)HttpContext.Current.Session["userPhotos"];
    }

    using (var zipStream = new 
        ZipOutputStream(HttpContext.Current.Response.OutputStream))
    {
        foreach (string photoUrl in photos)
        {
            byte[] fileBytes = File.ReadAllBytes(photoUrl);

            var fileEntry = new ZipEntry(
                Path.GetFileName(photoUrl))
            {
                Size = fileBytes.Length
            };

            zipStream.PutNextEntry(fileEntry);
            zipStream.Write(fileBytes, 0, fileBytes.Length);
        }

        zipStream.Flush();
        zipStream.Close();

        // reset session
        HttpContext.Current.Session["userPhotos"] = new List<string>();
    }
}

ユーザーがセッションに写真のURLを持っていて、ボタンをクリックしてこの関数を呼び出すと、ファイルが圧縮され、ユーザーのブラウザーでダウンロードが開始されます。

しかし、圧縮ファイルを開こうとすると、次のエラーが発生します。

Windowsはフォルダを開くことができません。

圧縮フォルダ「{マイファイルへのパス}」が無効です。

このエラーの原因となっている何か間違ったことをしていますか?

4

2 に答える 2

3

この例Response.FlushのとZipEntry.CleanNameの配置を調べて、同様の記述で問題が解決するかどうかを確認してください。

于 2013-03-13T03:32:26.393 に答える