Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

PB avec URLDownloadToFile

9 réponses
Avatar
Emilie
Bonjour

J'ai intégré ce code dans une appli en asp.net pour télécharger un fichier
de mon site web vers un PC distant
Ors il ne se passe rien, voici mon code :
Private Declare Function URLDownloadToFile Lib "urlmon" _

Alias "URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal dwReserved As Long, _

ByVal lpfnCB As Long) As Long



Public Function DownloadFile(ByVal sSourceUrl As String, _

ByVal sLocalFile As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, sSourceUrl, sLocalFile, 0, 0)

If lngRetVal = 0 Then

DownloadFile = True

End If

End Function



Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)

DownloadFile("http://www.monsite.com/Fnt4.ttf", "C:\Essai\Fnt4.ttf")

End sub


j'ai pour valeur de lngRetVal un chiffre 2952109557889630221 à la place de 0

Pouvez-vous me dire où est l'erreur
Merci par avance Emilie

9 réponses

Avatar
Jérémy Jeanson
Bonjour Emilie,

Je n'ai pas connaissance de cette méthode URLDownloadToFile... cela sort
d'où?

En général en ASP.net on a plutôt tendance à lire le fichier et l'écrire
dans la Stream d'un nouvelle page afin de ne pas donner accès
directement au fichier téléchargé.

Cela donne un code du genre :

' Code à ajouter au Page_Load() d'un page

' Création de la sortie
Response.Clear();
Response.ContentType = "application/octet-stream";
Response.AddHeader( _
"Content-Disposition", _
"attachment; filename=fichier.csv");

' Ecriture des données dans le flux
Dim writer as New StreamWriter(Response.OutputStream,
Encoding.Default);
writer.WriteLine("..."); 'Ecrire ici les données provenant du
fichier original en le lisant via un StreamReader par exemple
writer.Flush();

Response.Flush();
Response.Close()

--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Jérémy Jeanson
Pardon pour les ";" dans mon exemple code, j'ai traduit une page c# que
j'utilise habituellement ...
... ceci, ...un peut trop rapidement, c'est un oublie.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Patrice
Cf la réponse de Jérémie mais en complément :
- toujours utiliser les fonctions dispo dans .NET plutôt que d'utiliser
Win32 (ici la définition est pour VB6, en VB.NET Long devient par exemple
Integer donc attention aux "vieilles" déclarations). Dans le cas précis la
fonction existe déjà dans .NET.
- erreur de logique, le "downloadfile" permet de récupérer le fichier en
local (comme ce code est exécuté sur le serveur c'est le serveur qui
récupère le fichier sur son disque), ce n'est donc de toute façon pas ce que
l'on veut.
- à la place du stream on peut aussi utiliser Response.TransmitFile
(http://msdn.microsoft.com/fr-fr/library/12s31dhy(VS.80).aspx) si le fichier
existe déjà sur le serveur web...

L'utilisateur verra une boite de dialogue et indiquera où sauver le fichier.
Pour des raisons de sécurité, il n'est pas possible de mettre le fichier où
tu veux sur le PC de l'utilisateur comme le code semble le supposer...


--
Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 493687d2$0$900$
Bonjour

J'ai intégré ce code dans une appli en asp.net pour télécharger un fichier
de mon site web vers un PC distant
Ors il ne se passe rien, voici mon code :
Private Declare Function URLDownloadToFile Lib "urlmon" _

Alias "URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal dwReserved As Long, _

ByVal lpfnCB As Long) As Long



Public Function DownloadFile(ByVal sSourceUrl As String, _

ByVal sLocalFile As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, sSourceUrl, sLocalFile, 0, 0)

If lngRetVal = 0 Then

DownloadFile = True

End If

End Function



Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)

DownloadFile("http://www.monsite.com/Fnt4.ttf",
"C:EssaiFnt4.ttf")

End sub


j'ai pour valeur de lngRetVal un chiffre 2952109557889630221 à la place de
0

Pouvez-vous me dire où est l'erreur
Merci par avance Emilie






Avatar
Emilie
Bonjour Patrice

Merci pour ta réponse, mais sur ce lien il n'y a pas d'exemple et je ne vois
pas quel code écrire

En fait je veux télécharger une Font sur le PC d'utilisateur
(C:windowsFonts...), afin que mon site apparaisse avec la bonne police

Merci pour ton aide
Emilie
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Cf la réponse de Jérémie mais en complément :
- toujours utiliser les fonctions dispo dans .NET plutôt que d'utiliser
Win32 (ici la définition est pour VB6, en VB.NET Long devient par exemple
Integer donc attention aux "vieilles" déclarations). Dans le cas précis la
fonction existe déjà dans .NET.
- erreur de logique, le "downloadfile" permet de récupérer le fichier en
local (comme ce code est exécuté sur le serveur c'est le serveur qui
récupère le fichier sur son disque), ce n'est donc de toute façon pas ce
que l'on veut.
- à la place du stream on peut aussi utiliser Response.TransmitFile
(http://msdn.microsoft.com/fr-fr/library/12s31dhy(VS.80).aspx) si le
fichier existe déjà sur le serveur web...

L'utilisateur verra une boite de dialogue et indiquera où sauver le
fichier. Pour des raisons de sécurité, il n'est pas possible de mettre le
fichier où tu veux sur le PC de l'utilisateur comme le code semble le
supposer...


--
Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 493687d2$0$900$
Bonjour

J'ai intégré ce code dans une appli en asp.net pour télécharger un
fichier de mon site web vers un PC distant
Ors il ne se passe rien, voici mon code :
Private Declare Function URLDownloadToFile Lib "urlmon" _

Alias "URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal dwReserved As Long, _

ByVal lpfnCB As Long) As Long



Public Function DownloadFile(ByVal sSourceUrl As String, _

ByVal sLocalFile As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, sSourceUrl, sLocalFile, 0, 0)

If lngRetVal = 0 Then

DownloadFile = True

End If

End Function



Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)

DownloadFile("http://www.monsite.com/Fnt4.ttf",
"C:EssaiFnt4.ttf")

End sub


j'ai pour valeur de lngRetVal un chiffre 2952109557889630221 à la place
de 0

Pouvez-vous me dire où est l'erreur
Merci par avance Emilie









Avatar
Jérémy Jeanson
Oulllllla, on arrive justement dans le genre de choses dont te parle
Patrice en base de son message : "la sécurité".

Pour utiliser ta font il faudra utiliser d'autres moyens. Et je ne sais
pas ce qui existe pour ce genre de chose (l'utilisation de font custom
étant un contexte rare sur le web du fait de ses contraintes). Peut être
devrait tu simplement t'orienter sur une font standard proche de la
tienne.
--
Jérémy JEANSON
MCP
http://www.jjeanson.fr
Avatar
Patrice
Ah c'est toi ? ;-) J'avais essayé de répondre au sujet précédent.

Cette méthode n'ira pas. Elle est destinée à envoyer un fichier à
l'utilisateur mais c'est lui qui décide ou sauver le fichier et demander à
l'utilisateur d'installer manuellement une police est fortement disuasif (et
il n'est pas possible de faire un "download" de cette façon sans que
l'utilisateur doive indiquer où stocker le fichier pour sécurité).

Je pensais avoir répondu dans l'autre fil de discussion qui était plus
spécifique à ce problème mais je ne vois effectivement pas de réponse.

En résumé de ma réponse précédente :
- à ma connaissance actuellement pas de mécanisme largement répandu (IE par
exemple propose qq chose). Peut-être dans le futur
- légalement peux tu "donner" cette police à d'autres personnes ?

Donc cela sera de toute façon peu fiable et compliqué à mettre en oeuvre,
voire illégal. Est-ce ce que cela vaut le coup ?

Côté CSS tu peux aussi indiquer une liste de polices, ce qui permettra donc
d'utiliser la première possible (donc tu auras ta police sur ton pc et tu
auras une autre police que tu choisis la plus proche possible sur d'autres
postes).

Quel est le but ultime ? Cette fonte est indispensable parce qu'elle fournit
des symboles ? Ou veut on un rendu identique au pixel près ? Est-ce gênant
que la police soit proche sans être forcément la même ? C'est un public
général ou destiné à des pc au sein d'une entreprise ?

Pour le futur qq chose comme
http://www.ampsoft.net/webdesign-l/WindowsMacFonts.html peut aider
(liste et copie d'écrans de qq polices répandues avec copie d'écrans sur
PC, Mac, Linux)

Donc en résumé, il est sans doute préférable de travailler directement sur
le problème d'origine (donc en changeant la poilice et en précisant des
polices alternatives) plutôt que d'essayer d'ajouter une couche pour essayer
de le contourner (en essayant d'installer une nouvelle police sur les
machines concernées)...

--

Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 4937c011$0$893$
Bonjour Patrice

Merci pour ta réponse, mais sur ce lien il n'y a pas d'exemple et je ne
vois
pas quel code écrire

En fait je veux télécharger une Font sur le PC d'utilisateur
(C:windowsFonts...), afin que mon site apparaisse avec la bonne police

Merci pour ton aide
Emilie
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Cf la réponse de Jérémie mais en complément :
- toujours utiliser les fonctions dispo dans .NET plutôt que d'utiliser
Win32 (ici la définition est pour VB6, en VB.NET Long devient par exemple
Integer donc attention aux "vieilles" déclarations). Dans le cas précis
la
fonction existe déjà dans .NET.
- erreur de logique, le "downloadfile" permet de récupérer le fichier en
local (comme ce code est exécuté sur le serveur c'est le serveur qui
récupère le fichier sur son disque), ce n'est donc de toute façon pas ce
que l'on veut.
- à la place du stream on peut aussi utiliser Response.TransmitFile
(http://msdn.microsoft.com/fr-fr/library/12s31dhy(VS.80).aspx) si le
fichier existe déjà sur le serveur web...

L'utilisateur verra une boite de dialogue et indiquera où sauver le
fichier. Pour des raisons de sécurité, il n'est pas possible de mettre le
fichier où tu veux sur le PC de l'utilisateur comme le code semble le
supposer...


--
Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 493687d2$0$900$
Bonjour

J'ai intégré ce code dans une appli en asp.net pour télécharger un
fichier de mon site web vers un PC distant
Ors il ne se passe rien, voici mon code :
Private Declare Function URLDownloadToFile Lib "urlmon" _

Alias "URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal dwReserved As Long, _

ByVal lpfnCB As Long) As Long



Public Function DownloadFile(ByVal sSourceUrl As String, _

ByVal sLocalFile As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, sSourceUrl, sLocalFile, 0, 0)

If lngRetVal = 0 Then

DownloadFile = True

End If

End Function



Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)

DownloadFile("http://www.monsite.com/Fnt4.ttf",
"C:EssaiFnt4.ttf")

End sub


j'ai pour valeur de lngRetVal un chiffre 2952109557889630221 à la place
de 0

Pouvez-vous me dire où est l'erreur
Merci par avance Emilie














Avatar
Emilie
Merci Patrice

Pour ta réponse, le site a été développé avec une Font demandée par le
client
et elle était sur le PC qui m'a servi à développer

Emilie
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Ah c'est toi ? ;-) J'avais essayé de répondre au sujet précédent.

Cette méthode n'ira pas. Elle est destinée à envoyer un fichier à
l'utilisateur mais c'est lui qui décide ou sauver le fichier et demander à
l'utilisateur d'installer manuellement une police est fortement disuasif
(et il n'est pas possible de faire un "download" de cette façon sans que
l'utilisateur doive indiquer où stocker le fichier pour sécurité).

Je pensais avoir répondu dans l'autre fil de discussion qui était plus
spécifique à ce problème mais je ne vois effectivement pas de réponse.

En résumé de ma réponse précédente :
- à ma connaissance actuellement pas de mécanisme largement répandu (IE
par exemple propose qq chose). Peut-être dans le futur
- légalement peux tu "donner" cette police à d'autres personnes ?

Donc cela sera de toute façon peu fiable et compliqué à mettre en oeuvre,
voire illégal. Est-ce ce que cela vaut le coup ?

Côté CSS tu peux aussi indiquer une liste de polices, ce qui permettra
donc d'utiliser la première possible (donc tu auras ta police sur ton pc
et tu auras une autre police que tu choisis la plus proche possible sur
d'autres postes).

Quel est le but ultime ? Cette fonte est indispensable parce qu'elle
fournit des symboles ? Ou veut on un rendu identique au pixel près ?
Est-ce gênant que la police soit proche sans être forcément la même ?
C'est un public général ou destiné à des pc au sein d'une entreprise ?

Pour le futur qq chose comme
http://www.ampsoft.net/webdesign-l/WindowsMacFonts.html peut aider
(liste et copie d'écrans de qq polices répandues avec copie d'écrans sur
PC, Mac, Linux)

Donc en résumé, il est sans doute préférable de travailler directement sur
le problème d'origine (donc en changeant la poilice et en précisant des
polices alternatives) plutôt que d'essayer d'ajouter une couche pour
essayer de le contourner (en essayant d'installer une nouvelle police sur
les machines concernées)...

--

Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 4937c011$0$893$
Bonjour Patrice

Merci pour ta réponse, mais sur ce lien il n'y a pas d'exemple et je ne
vois
pas quel code écrire

En fait je veux télécharger une Font sur le PC d'utilisateur
(C:windowsFonts...), afin que mon site apparaisse avec la bonne police

Merci pour ton aide
Emilie
"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

Cf la réponse de Jérémie mais en complément :
- toujours utiliser les fonctions dispo dans .NET plutôt que d'utiliser
Win32 (ici la définition est pour VB6, en VB.NET Long devient par
exemple
Integer donc attention aux "vieilles" déclarations). Dans le cas précis
la
fonction existe déjà dans .NET.
- erreur de logique, le "downloadfile" permet de récupérer le fichier en
local (comme ce code est exécuté sur le serveur c'est le serveur qui
récupère le fichier sur son disque), ce n'est donc de toute façon pas ce
que l'on veut.
- à la place du stream on peut aussi utiliser Response.TransmitFile
(http://msdn.microsoft.com/fr-fr/library/12s31dhy(VS.80).aspx) si le
fichier existe déjà sur le serveur web...

L'utilisateur verra une boite de dialogue et indiquera où sauver le
fichier. Pour des raisons de sécurité, il n'est pas possible de mettre
le
fichier où tu veux sur le PC de l'utilisateur comme le code semble le
supposer...


--
Patrice


"Emilie" a écrit dans le message de groupe de
discussion : 493687d2$0$900$
Bonjour

J'ai intégré ce code dans une appli en asp.net pour télécharger un
fichier de mon site web vers un PC distant
Ors il ne se passe rien, voici mon code :
Private Declare Function URLDownloadToFile Lib "urlmon" _

Alias "URLDownloadToFileA" _

(ByVal pCaller As Long, _

ByVal szURL As String, _

ByVal szFileName As String, _

ByVal dwReserved As Long, _

ByVal lpfnCB As Long) As Long



Public Function DownloadFile(ByVal sSourceUrl As String, _

ByVal sLocalFile As String) As Boolean

Dim lngRetVal As Long

lngRetVal = URLDownloadToFile(0, sSourceUrl, sLocalFile, 0, 0)

If lngRetVal = 0 Then

DownloadFile = True

End If

End Function



Protected Sub Page_Load(ByVal sender As Object, ByVal e As
System.EventArgs)

DownloadFile("http://www.monsite.com/Fnt4.ttf",
"C:EssaiFnt4.ttf")

End sub


j'ai pour valeur de lngRetVal un chiffre 2952109557889630221 à la place
de 0

Pouvez-vous me dire où est l'erreur
Merci par avance Emilie

















Avatar
Patrice
C'est quoi comme police ? Le client n'a pas tenu compte de la diffusion ou
non de cette police ailleurs que chez lui ? C'est un site destiné à un
public général ?

Donc à mon avis :
- ajouter dans la liste des polices courantes qui pourrait faire l'affaire
- remonter le problème au client
- sinon http://www.microsoft.com/typography/web/embedding/weft3/default.htm
pour IE
- attention aux problèmes legaux

Bon courage.

"Emilie" a écrit dans le message de groupe de
discussion : 4937f421$0$871$
Merci Patrice

Pour ta réponse, le site a été développé avec une Font demandée par le
client
et elle était sur le PC qui m'a servi à développer



Avatar
Emilie
La police est Amazone BT et c'est un site destiné à un public général
Comment faire :
- ajouter dans la liste des polices courantes qui pourrait faire l'affaire
- remonter le problème au client

Merci pour ton aide
Emilie

"Patrice" <http://www.chez.com/scribe/> a écrit dans le message de news:

C'est quoi comme police ? Le client n'a pas tenu compte de la diffusion ou
non de cette police ailleurs que chez lui ? C'est un site destiné à un
public général ?

Donc à mon avis :
- ajouter dans la liste des polices courantes qui pourrait faire l'affaire
- remonter le problème au client
- sinon
http://www.microsoft.com/typography/web/embedding/weft3/default.htm pour
IE
- attention aux problèmes legaux

Bon courage.

"Emilie" a écrit dans le message de groupe de
discussion : 4937f421$0$871$
Merci Patrice

Pour ta réponse, le site a été développé avec une Font demandée par le
client
et elle était sur le PC qui m'a servi à développer