Frage

Ich bin zu Benutzer versucht, die Response.TransmitFile (), um prompt ein Download. Ich habe eine Reihe von Beiträgen zu diesem Thema gelesen und anhand meiner Methode aus Rick Strahl Blog http://www.west-wind.com/weblog/posts/76293.aspx

Der einzige Unterschied (das ich sagen kann) ist, dass ich eine physische Datei außerhalb des virtuellen Verzeichnisses bin Targeting. Dieser Code wird in einem ajaxified RadGrid genannt ... Ich frage mich, ob die Response.TransmitFile funktioniert nicht mit Ajax-Aufrufen? Hier ist mein Code-Snippet:

            // 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();
            }

Sehen Sie das System weiß, die Datei vorhanden ist ... es wird bis zum Response.End () ohne Fehler ... dann die App weiterhin richtig ... Außer es keine Download-Aufforderung ist.

Die ReturnExtension Methode von einer anderen Seite angehoben wird (sorry ich kann mich nicht erinnern, wo!) Wie folgt

    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";
        }
    }
War es hilfreich?

Lösung

Dieses Problem ist, dass ich nicht Response.TransmitFile () von einem AJAX-Aufruf machen. Nach ein paar Blogs zu lesen verwende ich die async Postbacks die src eines unsichtbaren iframe einzustellen. Der iframe sendet dann die Datei in ihrem Ladeereignis.

Andere Tipps

Ich würde vermuten, dass der Code die Transmit tun nicht die Rechte hat, diese Datei zu öffnen. Können Sie TransmitFile mit einem bereits geöffneten Datei-Handle nennen? Das sollte besser funktionieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top