سؤال

هذا هو رمز بلدي

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.Clear();
        Response.BufferOutput = false;
        String ReadmeText = "some text";
        Response.ContentType = "application/zip";
        Response.AddHeader("content-disposition", "filename=" + "filename.zip");
        using (ZipFile zip = new ZipFile())
        {
            zip.AddEntry("Readme.txt", ReadmeText);
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

في هذه المرحلة، أحاول ببساطة إرجاع ملف مضغوط مع مستند README.TXT داخل الرمز البريدي مع عبارة "بعض النص" داخل المستند.

ما أحصل عليه هو zipfile اسمه filename.zip (المتوقع) مع مستند README.TXT (المتوقع) مع عدم وجود نص داخل الوضعة (غير متوقع).

هذا الرمز هو حرفي تقريبا من المثال هنا. وبعد مما يجعلني شيء آخر يعمل الناس في هذه المشكلة بالضبط.

هدفي النهائي هو أن تفعل شيئا كهذا.

    private void sendToClient(Dictionary<string, string> reportDic)
    {
        Response.BufferOutput = false;
        Response.ContentType = "application/zip";
        Response.AddHeader("content-dispostion", "filename=text.zip");
        Response.ContentEncoding = Encoding.Default;
        Response.Charset = "";
        using (ZipFile zip = new ZipFile())
        {
            foreach (string key in reportDic.Keys)
            {
                zip.AddEntry(key, reportDic[key]);
            }
            zip.Save(Response.OutputStream);
        }
        Response.Close();
    }

أضف ثلاث سلاسل كملفات إلى ملف ZIP، لكنني سأقبل على الحصول على مثال للعمل الآن.

هل لديكم أي اقتراحات؟

شكرا

- update-- هذا يجب أن يعمل، في الواقع إذا قمت بنسخه إلى مشروع جديد، فإنه يعمل تماما كما هو معلن، يجب أن يكون لدي مزيج سام من DLLs أو بعض الفساد في مشروعي، وهذا أمر غامض أو شيء ما. رائع.

هل كانت مفيدة؟

المحلول

ملحوظة:

لا تستخدم

HttpContext.Current.ApplicationInstance.CompleteRequest();    

بدلا من ذلك، استخدم

Response.Close();

إذا كنت تستخدم السابق، فستحصل على junk HTML ملحقا بأسفل ملف ZIP الخاص بك.

نصائح أخرى

هل حاولت وضع طريقة AddFile مع بعض النص الدمية = أعتقد أن هذا مطلوب.

يبدو المثال الذي ترتبط به في Codeplex يقول AddEntry طريقة يقرأ البيانات من دفق. أنت فقط تمر في سلسلة - ربما يمكنك محاولة إنشاء StringReader لإلقاء نظرة على سلسلة READMETEXT الخاصة بك، وتمرير هذا بدلا من ذلك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top