ブラウザでファイルをダウンロードおよび開くコード

7766 ワード

asp.Netでは、ファイルをダウンロードしたりブラウザでファイルを開いたりするのがよく使われる機能です。キーは、1 ContentType 2 URL 3 Content-dispositionの3つです。


1 ContentType


クラス容量タイプを表すと、ブラウザがどのような形式で、どのコードでこのファイルを読み込むかが決まります。


例えばgifは、gifピクチャの出力を表し、アプリケーション/pdfはpdfドキュメントの入力を表し、アプリケーション/mswordはwordドキュメントの出力を表す
一般的なContentType

2URL

ファイルを使用する必要があるため、ファイルは常に中国語であり、urlを処理する必要があります.そうしないと、文字化けしてダウンロードが失敗する可能性があります.

3Content-disposition


これは、ブラウザでドキュメントをダウンロードするか、直接開くかを制御します.なお、開いているコードは、ブラウザによってはブラウザで開かない場合があり、保存して開く必要がある場合があります.
ダウンロードコードを開く
  /// <summary>
        ///          ,        ,          ,              
        /// </summary>
        /// <param name="filpath"></param>
        /// <param name="filename"></param>
        public static void OpenFile(string filpath, string filename)
        {
            long fileSize = 0;
            byte[] fileBuffer;
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            HttpContext.Current.Response.Expires = 0;
            HttpContext.Current.Response.CacheControl = "no-cache";
            HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache");
            HttpContext.Current.Response.ContentType = "application/pdf;";//     
            HttpContext.Current.Response.Charset = "charset=utf-8";
            HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UrlEncode(filename) + "\";");//         ,        

            using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read))
            {
                fileSize = fileStream.Length;
                fileBuffer = new byte[fileSize];
                fileStream.Read(fileBuffer, 0, (int)fileSize);
                fileStream.Close();
            }
            HttpContext.Current.Response.BinaryWrite(fileBuffer);
            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//    
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }
        /// <summary>
        ///          
        /// </summary>
        /// <param name="filpath"></param>
        /// <param name="filename"></param>
        public static void DownFile(string filpath, string filename)
        {
            long fileSize = 0;
            byte[] fileBuffer;
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            HttpContext.Current.Response.Expires = 0;
            HttpContext.Current.Response.CacheControl = "no-cache";
            HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache");
            HttpContext.Current.Response.ContentType = "application/pdf;";//     
            HttpContext.Current.Response.Charset = "charset=utf-8";//  
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UrlEncode(filename) + "\";");//         ,        

            using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read))
            {
                fileSize = fileStream.Length;
                fileBuffer = new byte[fileSize];
                fileStream.Read(fileBuffer, 0, (int)fileSize);
                fileStream.Close();
            }
            HttpContext.Current.Response.BinaryWrite(fileBuffer);
            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//    
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }
        private static string UrlEncode(string filename)
        {

            return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);

        }
コード2
 public class OpenDownFile
    {
        /// <summary>
        ///          ,        ,          ,              
        /// </summary>
        /// <param name="filpath"></param>
        /// <param name="filename"></param>
        public static void OpenFile(string filpath, string filename,string filetype)
        {
            long fileSize = 0;
            byte[] fileBuffer;
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            HttpContext.Current.Response.Expires = 0;
            HttpContext.Current.Response.CacheControl = "no-cache";
            HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache");
            HttpContext.Current.Response.ContentType = filetype;//     
            HttpContext.Current.Response.Charset = "charset=utf-8";
            HttpContext.Current.Response.AddHeader("Content-Disposition", "inline; filename=\"" + UrlEncode(filename) + "\";");//         ,        

            using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read))
            {
                fileSize = fileStream.Length;
                fileBuffer = new byte[fileSize];
                fileStream.Read(fileBuffer, 0, (int)fileSize);
                fileStream.Close();
            }
            HttpContext.Current.Response.BinaryWrite(fileBuffer);
            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//    
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }
        /// <summary>
        ///          
        /// </summary>
        /// <param name="filpath"></param>
        /// <param name="filename"></param>
        public static void DownFile(string filpath, string filename,string filetype)
        {
            long fileSize = 0;
            byte[] fileBuffer;
            HttpContext.Current.Response.Buffer = true;
            HttpContext.Current.Response.ExpiresAbsolute = System.DateTime.Now.AddMilliseconds(0);
            HttpContext.Current.Response.Expires = 0;
            HttpContext.Current.Response.CacheControl = "no-cache";
            HttpContext.Current.Response.AppendHeader("Pragma", "No-Cache");
            HttpContext.Current.Response.ContentType =filetype;//     
            HttpContext.Current.Response.Charset = "charset=utf-8";//  
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + UrlEncode(filename) + "\";");//         ,        

            using (FileStream fileStream = new FileStream(filpath, FileMode.Open, FileAccess.Read))
            {
                fileSize = fileStream.Length;
                fileBuffer = new byte[fileSize];
                fileStream.Read(fileBuffer, 0, (int)fileSize);
                fileStream.Close();
            }
            HttpContext.Current.Response.BinaryWrite(fileBuffer);
            HttpContext.Current.Response.AddHeader("Content-Length", fileSize.ToString());//    
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.End();

        }
        private static string UrlEncode(string filename)
        {

            return HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8);

        }
    }