прамая загрузка файла замест адкрыцця з апрацоўшчыкам - памер файла пытанне, які паказвае

плз ўбачыць ніжэй апрацоўшчыка:

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

namespace FileExplorer
{
    /// 
/// Summary description for HandlerForMyFE ///
 
    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;
            }
        }
    }
}

я пісаў, што апрацоўшчык для прамой загрузкі файла пасля націску без адкрыцця гэтага файла ў браўзэры ...
здаецца, верхнія коды працуюць!
але ёсць праблема для адлюстравання памеру файла падчас загрузкі.
для тэсту, плз убачыць спасылку ніжэй:
тэст з мэнэджарам інтэрнэт-загрузкі
у сувязі з гэтым мы не маем памер файла, але ў спасылцы ніжэй мы яго:
іншую спасылку
што гэта праблема майго апрацоўшчыка і як я магу вырашыць гэтую праблему?

загадзя дзякую

1

1 адказы

Я не запускаць гэты код. Вось яшчэ адзін спосаб перадачы файла.

Паспрабуйце гэты код:

//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();
2
дададзена
дзякуй за адказ/я праверыць гэты шлях -> праблема ўсё яшчэ існуе
дададзена аўтар MoonLight, крыніца
ДЗЯКУЙ BRO -> СУПЕР ВЫРАШЫЦЬ
дададзена аўтар MoonLight, крыніца
Вы спрабавалі Content-Length? См абноўлены адказ.
дададзена аўтар Valamas, крыніца
Выдатна! Спадзяюся, што іншы код быў у выкарыстанні таксама.
дададзена аўтар Valamas, крыніца