سؤال

أحاول استخدام الاستجابة. transmitfile () للمطالبة بتنزيل. لقد قرأت عددًا من المنشورات حول هذه القضية وأعتمدت طريقتي قبالة مدونة ريك ستراهلhttp://www.west-wind.com/weblog/posts/76293.aspx

الفرق الوحيد (الذي يمكنني قوله) هو أنني أستهدف ملفًا فعليًا خارج الدليل الافتراضي. يتم استدعاء هذا الرمز في Radgrid Ajaxified ... أتساءل عما إذا كان Response.Transmitfile لا يعمل مع مكالمات Ajax؟ هنا هو قصاصة الكود الخاصة بي:

            // Get the physical Path of the file
            string docFilePath = (string)args.AttachmentKeyValues["DocFilePath"];

            // Create New instance of FileInfo class to get the properties of the file being downloaded
            FileInfo file = new FileInfo(docFilePath);

            // Checking if file exists
            if (file.Exists)
            {
                Response.ClearContent();

                Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);


                Response.AddHeader("Content-Length", file.Length.ToString());


                Response.ContentType = ReturnExtension(file.Extension.ToLower());


                Response.TransmitFile(file.FullName);

                Response.End();
            }

راجع النظام يعرف أن الملف موجود ... إنه يصل إلى Response.end () دون خطأ ... ثم يواصل التطبيق بشكل صحيح ... باستثناء عدم وجود موجه تنزيل.

يتم رفع طريقة العودة من موقع آخر (آسف لا أستطيع تذكر أين!) على النحو التالي

    string ReturnExtension(string fileExtension)
    {
        // In the long run this should go in a class
        switch (fileExtension)
        {
            case ".htm":
            case ".html":
            case ".log":
                return "text/HTML";
            case ".txt":
                return "text/plain";
            case ".doc":
                return "application/ms-word";
            case ".tiff":
            case ".tif":
                return "image/tiff";
            case ".asf":
                return "video/x-ms-asf";
            case ".avi":
                return "video/avi";
            case ".zip":
                return "application/zip";
            case ".xls":
            case ".csv":
                return "application/vnd.ms-excel";
            case ".gif":
                return "image/gif";
            case ".jpg":
            case "jpeg":
                return "image/jpeg";
            case ".bmp":
                return "image/bmp";
            case ".wav":
                return "audio/wav";
            case ".mp3":
                return "audio/mpeg3";
            case ".mpg":
            case "mpeg":
                return "video/mpeg";
            case ".rtf":
                return "application/rtf";
            case ".asp":
                return "text/asp";
            case ".pdf":
                return "application/pdf";
            case ".fdf":
                return "application/vnd.fdf";
            case ".ppt":
                return "application/mspowerpoint";
            case ".dwg":
                return "image/vnd.dwg";
            case ".msg":
                return "application/msoutlook";
            case ".xml":
            case ".sdxl":
                return "application/xml";
            case ".xdp":
                return "application/vnd.adobe.xdp+xml";
            default:
                return "application/octet-stream";
        }
    }
هل كانت مفيدة؟

المحلول

هذه المسألة هي أنه لا يمكنني إجراء استجابة. بعد قراءة بعض المدونات ، أستخدم Postback Async لتعيين SRC لـ Iframe غير المرئي. Iframe ثم يرسل الملف في حدث التحميل الخاص به.

نصائح أخرى

أظن أن الكود الذي يقوم بالإرسال ليس لديه حقوق فتح هذا الملف. هل يمكنك استدعاء Transmitfile مع مقبض ملف مفتوح بالفعل؟ يجب أن يعمل هذا بشكل أفضل.

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