2017-06-21 80 views
0

我有一個FileHandler.ashx實現IHttpHandler。這個處理程序所做的唯一的事情就是獲取文件並通過context.Response返回。HttpHandler不在服務器上呈現圖像

即使在發佈它之後(在本地計算機上),它在我的本地單元中也能正常工作。雖然在服務器上,它只有在我通過Visual Studio運行網站時纔有效,但如果我訪問已發佈的網站(如http://url.to.site/),則它不起作用。

這是個什麼樣子我的本地機器上運行時一樣(直通Visual Studio或發佈的網站),並直通Visual Studio中的服務器計算機上: enter image description here

這是個什麼樣子訪問時像在服務器上發佈的網站:enter image description here

這是從ProcessRequest方法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是文件的路徑。

** UPDATE **

如果這將幫助:我使用的服務器是正在使用Plesk保持GoDaddy的服務器。

回答

0

我找到了答案:我使用了錯誤的變量在這一行:

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

file.Length.ToString()應該已經fileInfo.Length.ToString(),但是當通VS運行,奇怪這段代碼不應該工作。

+0

這個答案早該過期了。 XD – dunli