Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Webprogrammeren & scripting

[ASP] Response.BinaryWrite Geannuleerd ja/nee?

Anoniem
Paulus
7 antwoorden
  • Ik stream bestandjes uit een database met:

    Response.ContentType = rs("ContentType")
    Response.AddHeader "Content-Disposition", "attachment; filename=" & rs("Filename")
    Response.BinaryWrite rs("File")

    De bezoeker krijgt dan van IE de keuze te openen, op te slaan of te annuleren. Is er een manier om te achterhalen welke keuze is gemaakt?
  • Bij de standaard save dialog van de browser denk ik van niet, maar misschien heb je hier wat aan?

    http://www.functionx.com/vbnet/controls/SaveFileDialog.htm
  • [quote:14707f988b="Paulus"]Ik stream bestandjes uit een database met:

    Response.ContentType = rs("ContentType")
    Response.AddHeader "Content-Disposition", "attachment; filename=" & rs("Filename")
    Response.BinaryWrite rs("File")

    De bezoeker krijgt dan van IE de keuze te openen, op te slaan of te annuleren. Is er een manier om te achterhalen welke keuze is gemaakt?[/quote:14707f988b]
    Nee, niet zonder iets op de client te installeren.

    Waarom zou je dat willen weten?
  • Omdat ik dan weet of het gestreamde bestand is gedownload of niet, dus of er dataverkeer was of niet. Dat kan ik in de weblog (iis) nl. niet terugvinden.
  • [quote:bc2a101e18="Paulus"]Omdat ik dan weet of het gestreamde bestand is gedownload of niet, dus of er dataverkeer was of niet. Dat kan ik in de weblog (iis) nl. niet terugvinden.[/quote:bc2a101e18]

    [code:1:bc2a101e18]
    Response.ContentType = rs("ContentType")
    Response.AddHeader "Content-Disposition", "attachment; filename=" & rs("Filename")
    Response.BinaryWrite rs("File")
    <———– (1)
    [/code:1:bc2a101e18]

    (1) Als je op dit punt in de code bent aanbeland dan weet je dat het bestand volledig is verstuurd.

    Het is heel goed mogelijk dat de client al begint met downloaden voordat de gebruiker daadwerkelijk een locatie gekozen heeft om het bestand op te slaan.
  • Als ik het hier lokaal doe (clientbak=serverbak) met een bestand van 80MB, dan lijkt het er idd op alsof het streamen al begint voor ik de keuze maak. Het duurt dan even voor ik het dialoogvenster krijg en als ik dan meteen enter (opslaan) dan begint het kopieren al (vanaf de cache, dus de download is dan helemaal klaar). Doe ik het met een bestand van 10 MB op een externe webserver, dan krijg ik direct het dialoogvenster en met mijn vinger op de escapeknop annuleer ik hem ook weer direct, dus op zeker voor de download gereed kan zijn. Ook dan wordt de code na (1) uitgevoerd (waar ik een logentry maak). Mijn conclusie is dan dat de code na de BinaryWrite hoedanook wordt uitgevoerd, of nou is opgeslagen of geannuleerd.
  • [code:1:aec2586f91]
    Response.ContentType = rs("ContentType")
    Response.AddHeader "Content-Disposition", "attachment; filename=" & rs("Filename")
    Response.BinaryWrite rs("File")
    <———– (1)
    if Response.IsClientConnected then
    ' OK
    else
    ' Connectie verbroken.
    endif
    [/code:1:aec2586f91]

    (1) Als je op dit punt in de code bent aanbeland dan weet je dat het bestand volledig is verstuurd.
    Als de verbinding met de client wegvalt, dan wordt de data naar een 'zwart gat' verstuurd.

    Het kan in dit voorbeeld wel zijn dat het bestand correct verstuurd wordt, maar op (1) de connectie verbroken wordt. Een andere mogelijkheid is het bestand in blokken naar de client versturen en per blok bekijken of er nog een connectie is.


    - How To Use IsClientConnected to Check If Browser Is Connected
    - ASP Timeout on Large Files or Slow Connection

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.