Question

Je suis en train de l'utilisateur du Response.TransmitFile () pour demander un téléchargement. J'ai lu un certain nombre de postes sur la question et sur la base de ma méthode de blog de Rick Strahl http://www.west-wind.com/weblog/posts/76293.aspx

La seule différence (que je peux dire) est que je vise un fichier physique en dehors du répertoire virtuel. Ce code est appelé dans un RadGrid ajaxified ... Je me demande si le Response.TransmitFile ne fonctionne pas avec les appels ajax? Voici mon extrait de code:

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

Voir le système connaît le fichier existe ... il passe à travers la Response.End () sans erreur ... continue alors l'application correctement ... Sauf qu'il n'y a pas d'invite de téléchargement.

La méthode ReturnExtension est soulevé d'un autre site (désolé, je ne me souviens pas où!) Comme suit

    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";
        }
    }
Était-ce utile?

La solution

Cette question est que je ne peux pas faire Response.TransmitFile () à partir d'un appel AJAX. Après avoir lu quelques blogs que j'utilise le postback async pour régler le src d'un iframe invisible. Le iframe envoie ensuite le fichier dans son cas de charge.

Autres conseils

Je suppose que le code fait la transmission n'a pas le droit d'ouvrir ce fichier. Pouvez-vous appeler TransmitFile avec un descripteur de fichier déjà ouvert? Cela devrait fonctionner mieux.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top