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.
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