directe bestandsdownload in plaats van openen met een handler - bestandsgrootte toont probleem

plz zie de onderstaande handler:

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;
            }
        }
    }
}

ik heb die handler geschreven voor direct downloadbestand na het klikken zonder dat bestand in de browser te openen ...
het lijkt erop dat de bovenste codes werken!
maar er is een probleem bij het weergeven van de bestandsgrootte tijdens het downloaden.
voor test zie je de onderstaande link:
Test met downloadmanager van internet
in die link hebben we geen bestandsgrootte, maar in de onderstaande link hebben we het:
een andere link
wat is het probleem van mijn handler en hoe kan ik dit probleem oplossen?

bij voorbaat dank

1

1 antwoord

Ik heb deze code niet uitgevoerd. Hier is een andere manier om het bestand te verzenden.

Probeer deze code:

//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
toegevoegd
bedankt voor het antwoord/ik test deze manier -> probleem bestaat nog steeds
toegevoegd de auteur MoonLight, de bron
BEDANKT BRO -> SUPER SOLVED
toegevoegd de auteur MoonLight, de bron
Heb je Content-Length geprobeerd? Zie bijgewerkte antwoord.
toegevoegd de auteur Valamas, de bron
Uitstekend! Ik hoop dat de andere code ook van nut was.
toegevoegd de auteur Valamas, de bron