2011-10-27 4 views
1

plzは下記のハンドラを参照してください。直接代わりにハンドラを持つ開口部のファイルのダウンロード - ファイルサイズの上映問題

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

namespace FileExplorer 
{ 
    /// <summary> 
    /// Summary description for HandlerForMyFE 
    /// </summary> 
    public class HandlerForMyFE : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
    { 

     private HttpContext _context; 
     private HttpContext Context 
     { 
      get 
      { 
       return _context; 
      } 
      set 
      { 
       _context = value; 
      } 
     } 

     public void ProcessRequest(HttpContext context) 
     { 
      Context = context; 
      string filePath = context.Request.QueryString["Downloadpath"]; 
      filePath = context.Server.MapPath(filePath); 

      if (filePath == null) 
      { 
       return; 
      } 

      System.IO.StreamReader streamReader = new System.IO.StreamReader(filePath); 
      System.IO.BinaryReader br = new System.IO.BinaryReader(streamReader.BaseStream); 

      byte[] bytes = new byte[streamReader.BaseStream.Length]; 

      br.Read(bytes, 0, (int)streamReader.BaseStream.Length); 

      if (bytes == null) 
      { 
       return; 
      } 

      streamReader.Close(); 
      br.Close(); 
      string fileName = System.IO.Path.GetFileName(filePath); 
      string MimeType = GetMimeType(fileName); 
      string extension = System.IO.Path.GetExtension(filePath); 
      char[] extension_ar = extension.ToCharArray(); 
      string extension_Without_dot = string.Empty; 
      for (int i = 1; i < extension_ar.Length; i++) 
      { 
       extension_Without_dot += extension_ar[i]; 
      } 

      //if (extension == ".jpg") 
      //{ // Handle *.jpg and 
      // WriteFile(bytes, fileName, "image/jpeg jpeg jpg jpe", context.Response); 
      //} 
      //else if (extension == ".gif") 
      //{// Handle *.gif 
      // WriteFile(bytes, fileName, "image/gif gif", context.Response); 
      //} 

      WriteFile(bytes, fileName, MimeType + " " + extension_Without_dot, context.Response); 
     } 

     private void WriteFile(byte[] content, string fileName, string contentType, HttpResponse response) 
     { 
      response.Buffer = true; 
      response.Clear(); 
      response.ContentType = contentType; 

      response.AddHeader("content-disposition", "attachment; filename=" + fileName); 

      response.BinaryWrite(content); 
      response.Flush(); 
      response.End(); 
     } 

     private string GetMimeType(string fileName) 
     { 
      string mimeType = "application/unknown"; 
      string ext = System.IO.Path.GetExtension(fileName).ToLower(); 
      Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); 
      if (regKey != null && regKey.GetValue("Content Type") != null) 
       mimeType = regKey.GetValue("Content Type").ToString(); 
      return mimeType; 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 

を私は、ブラウザでそのファイルを開くことなく、クリックした後、直接ダウンロードしたファイルのためのそのハンドラ...
を書きました それは上のコードが動作するようだ!
ダウンロード中にファイルサイズが表示される問題があります。私たちは、ファイルサイズを持っていませんが、リンクでは、我々はそれを持って下にそのリンクで
Test with internet download manager
:plzは下のリンクを参照して、テストのための
私のハンドラの問題が何であるかを
another link
をし、どうすればこの問題を解決できますか?

ありがとうございました

答えて

2

私はこのコードを実行していません。ファイルを送信する別の方法があります。

は、このコードを試してみてください。答えを

//context = HttpContext 
context.Response.Clear(); 
context.Response.ContentType = varMimeType; 
context.Response.TransmitFile(filePath); 
context.Response.AddHeader("content-disposition", "attachment;filename=" + varFileName); 
context.Response.AddHeader("Content-Length", filePathFileInfo.Length); 
context.Response.Flush(); 
context.Response.End(); 
+0

感謝を/私はこの方法をテスト - >問題はまだ – MoonLight

+0

あなたがコンテンツ長を試してみましたが、存在しますか?更新された回答をご覧ください。 –

+0

ありがとうございました - > SUPER SOLVED – MoonLight

関連する問題