2012-04-04 4 views
3

Ich habe einen Download-Handler, der die Datei herunterladen wird, wenn in IE, aber in Chrome versucht es selbst zu downloaden. Damit meine ich, Chrome eine Datei namens herunterladen versucht downloadhandler.ashx Der Code für die Behandlungsroutine istASP.NET Download Handler funktioniert in IE aber nicht Chrome

<%@ WebHandler Language="C#" Class="DownloadHandler" %> 
using System; 
using System.Web; 

public class DownloadHandler : IHttpHandler 
{ 
public void ProcessRequest(HttpContext context) 
{ 
    string file = ""; 

    // get the file name from the querystring 
    if (context.Request.QueryString["Filepath"] != null) 
    { 
     file = context.Request.QueryString["Filepath"].ToString(); 
    } 

    string filename = context.Server.MapPath("~/Minutes/" + file); 
    System.IO.FileInfo fileInfo = new System.IO.FileInfo(filename); 

    try 
    { 
     if (fileInfo.Exists) 
     { 
      context.Response.Clear(); 
      context.Response.AddHeader("Content-Disposition", "inline;attachment; filename=\"" + fileInfo.Name + "\""); 
      context.Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
      context.Response.ContentType = "application/octet-stream"; 
      context.Response.TransmitFile(fileInfo.FullName); 
      context.Response.Flush(); 
     } 
     else 
     { 
      throw new Exception("File not found"); 
     } 
    } 
    catch (Exception ex) 
    { 
     context.Response.ContentType = "text/plain"; 
     context.Response.Write(ex.Message); 
    } 
    finally 
    { 
     context.Response.End(); 
    } 
} 

public bool IsReusable 
{ 
    get 
    { 
     return false; 
    } 
} 



} 

Der Handler seine Informationen aus diesem Stück Code erhält

private static string BuildAbsolute(string relativeUri) 
{ 
    // get current uri 
    Uri uri = HttpContext.Current.Request.Url; 
    // build absolute path 
    string app = HttpContext.Current.Request.ApplicationPath; 
    if (!app.EndsWith("/")) app += "/"; 
    relativeUri = relativeUri.TrimStart('/'); 
    // return the absolute path 
    return HttpUtility.UrlPathEncode(
     String.Format("http://{0}:{1}{2}{3}", 
     uri.Host, uri.Port, app, relativeUri)); 
} 

die dazu verwendet wird, methode

public static string ToDownloadMinutes(string fileName) 
{ 
    return BuildAbsolute(String.Format("Handlers/DownloadHandler.ashx?Filepath={0}", fileName)); 
} 

Jede Hilfe, die diese Download-Funktion in Chrome unterstützt, wäre sehr willkommen.

+0

ich ändern würde context.Response.ContentType = „application/octet-stream "; von context.Response.ContentType = Net.Mime.MediaTypeNames.Application.Octet Erstellen Sie eine Angewohnheit, dies zu verwenden, und Sie werden keine Zeit wegen Tippfehlern verlieren. – JDC

Antwort

5

Try "inline" aus dem Content-Disposition-Header als "inline" & "attachment" nicht verwendet werden soll zusammen zu entfernen:

context.Response.AddHeader("Content-Disposition", "attachment; filename=\"" 
    + fileInfo.Name + "\""); 
+0

Danke Mann, arbeitete wie ein Charme – tuckerjt07