2017-06-21 4 views
0

J'ai un FileHandler.ashx qui implémente IHttpHandler. La seule chose que ce gestionnaire fait est d'obtenir le fichier et de le renvoyer par context.Response.HttpHandler ne rend pas l'image sur le serveur

Cela fonctionne très bien dans mon unité locale même après l'avoir publié (sur ma machine locale). Alors que sur le serveur, cela ne fonctionne que si je lance le site Web via Visual Studio, cela ne fonctionne pas si j'accède au site Web publié (c'est-à-dire http://url.to.site/).

C'est ce qu'il ressemble lors de l'exécution sur ma machine locale (à travers Visual Studio ou site publié), et à travers Visual Studio sur la machine serveur: enter image description here

Et voici à quoi il ressemble lorsque vous accédez à la site publié sur le serveur: enter image description here

Ceci est un extrait de la méthode ProcessRequest du FileHandler:

var strExtenstion = Path.GetExtension(file); 
var fileInfo = new FileInfo(file); 

context.Response.Clear(); 
context.Response.ClearContent(); 
context.Response.AppendHeader("content-length", file.Length.ToString()); 

if (strExtenstion == ".pdf") { context.Response.ContentType = "application/pdf"; } 
else if (strExtenstion == ".png") { context.Response.ContentType = "image/png"; } 
else if (strExtenstion == ".jpg") { context.Response.ContentType = "image/jpeg"; } 
else if (strExtenstion == ".gif") { context.Response.ContentType = "image/gif"; } 
else if (strExtenstion == ".bmp") { context.Response.ContentType = "image/bmp"; } 
else if (strExtenstion == ".txt") { context.Response.ContentType = "text/plain"; } 
else { 
    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + fileInfo.Name); 
    context.Response.ContentType = "application/octet-stream"; 
} 

context.Response.WriteFile(fileInfo.FullName); 

file est le chemin du fichier.

** MISE A JOUR **

Si cela aiderait: le serveur j'est un serveur GoDaddy qui est maintenu en utilisant Plesk.

Répondre

0

J'ai trouvé la réponse: je la mauvaise variable dans cette ligne:

context.Response.AppendHeader("content-length", file.Length.ToString()); 

file.Length.ToString() aurait dû être fileInfo.Length.ToString(), mais ce code ne devrait pas avoir travaillé lorsqu'il est exécuté à travers VS, étrange.

+0

Cette réponse était attendue depuis longtemps. XD – dunli