Sardonnen
Messages postés89Date d'inscriptionlundi 29 avril 2002StatutMembreDernière intervention 6 décembre 2006
-
7 févr. 2006 à 09:00
Driche
Messages postés1Date d'inscriptionmardi 6 septembre 2005StatutMembreDernière intervention 1 mars 2007
-
1 mars 2007 à 16:58
bonjour,
j'utilise asp.net V1 pour uploader mes fichiers sur le serveur mais je mets une clé numérique au début du nom du fichier avant de le sauvegarder sur le serveur (cela permet par exemple de sauvegarder des fichiers différents avec le même nom). Par contre je souhaiterais forcer l'affichage la boite de dialogue pour ouvrir ou enregistrer le fichier et forcer le nom du fichier si l'utisateur souhaite l'enregistrer, j'ai cherché des sources mais sans succès, comment dois je faire????
Voici mon code pour faire mes upload :
Dim savePath As String = "c:\www\upload"
Sub Upload_Click(sender As Object, e As System.Web.UI.ImageClickEventArgs)
If Not (ul_file.PostedFile Is Nothing) Then
Try
Dim postedFile = ul_file.PostedFile
Dim filename As String = Path.GetFileName(postedFile.FileName)
Dim contentType As String = postedFile.ContentType
Dim contentLength As Integer = postedFile.ContentLength
dim r_ident_file as string
r_ident_file= ' valeur incrementée
Sardonnen
Messages postés89Date d'inscriptionlundi 29 avril 2002StatutMembreDernière intervention 6 décembre 2006 7 févr. 2006 à 13:18
mais dans ce cas là tu es donc obligé de passer par une page intermédiaire qui va te demander d'ouvrir ou enregistrer, ok
mais pour spécifier un nom dans la boite de dialogue enregistrer qui est différent du nom réél sur le serveur, tu procedes comment????
dans cette page tu récuperes ton stream tu l'affiches avec response.binarywrite (ou un truc du genre) mais le pb c'est que si c'est une image alors le navigateur va l'afficher plutot que de la proposer en telechargement ...
Si tu rajoutes ce content-type (le bout de code du dessus) ca va faire forcer au navigateur à proposer en telechargement le fichier
Mais aprés relecture de la question je ne suis pas sur que c'est ce que tu voulais ?
Sardonnen
Messages postés89Date d'inscriptionlundi 29 avril 2002StatutMembreDernière intervention 6 décembre 2006 7 févr. 2006 à 13:52
si c'est la premier element de reponse que je souhaitais mais ensuite mon nom de fichier sur le serveur va etre 34_test.txt et j'aimerais forcer le nom de fichier dans la boite de dialogue à test.txt, est ce que ça c'est possible???
merci en tout cas pour forcer l'affichage de la boite de dialogue.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 7 févr. 2006 à 14:03
Je pense que ca doit etre possible
si tu modifies cette ligne :
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" & id & "." & oFichier.Extension)
tu vois que tu peux modifier le champ fileName, pour cela il faudra bien sur que tu fasses une page aspx (ou un handler) qui permettra d'envoyer le fichier genre FileById.aspx?id=toto.txt cette page recuperera 34_toto.txt enverra son contenu via response.binarywrite et il te faudra alors setter le bon content type ainsi que le content-disposition :)
Sardonnen
Messages postés89Date d'inscriptionlundi 29 avril 2002StatutMembreDernière intervention 6 décembre 2006 7 févr. 2006 à 14:20
si j'ai bien compris à travers le content-type et content-disposition tu spécifies le nom réél du fichier sur le serveur avec son application associé. A quel moment ou bien a quel endroit tu lui spécifie que le fichier 34_toto.txt sur le serveur tu veux qu'il soit afficher pour l'utilisateur du genre enregistrer le fichier toto.txt???
parce qu'avec FileById.aspx?id=34_toto.txt, tu spécifies le fichier impacté par la boite de dialogue ouvrir ou enregistrer, pour le moment on ne spécifie pas le libellé présent dans la boite de dialogue enregistrer sous au niveau du nom du fichier. hors moi à la limite je souhaiterais forcer le nom du fichier dans la boite de dialogue à tata.txt.
jesusonline
Messages postés6814Date d'inscriptiondimanche 15 décembre 2002StatutMembreDernière intervention13 octobre 201029 7 févr. 2006 à 14:43
Quand tu vas sur FileByID.aspx?id= 34_toto.txt
enf ait dans le page_load tu passes à la moulinette l'id (je te conseil de pas mettre le nom du fichier mais autre chose) tu lui envoie via un response.writeFile ou response.binaryWrite le fichier qu'il veut ensuite tu peux encore jouer sur les en tetes http pour cela tu spécifie
le code sait qu'il doit aller le fichier 34_toto.txt???
car pour moi je comprenais que le fichier allait chercher sur le serveur un fichier qui se nomme toto.txt. Tu vois c'est là que je ne vois pas l'intêret de ton id???
Dim dir As String = Request.MapPath("upload")
Dim id As String = request.querystring("id")
If id <> "" then
Response.Clear() ' Vide le buffer
' Dialogue de téléchargement
Response.ContentType ="application/octet-stream"
' seulement pour application/octet-stream !
Response.AddHeader("Content-Disposition","attachment; filename=" & id)
Response.Flush() ' Envoie le buffer
Response.WriteFile(dir & "" & id ) ' Envoie le contenu du fichier
End If
End Sub
</script>
car avec ce code j'obtiens bien une boite de dialogue mais le nom de fichier qui apparait dans la boite de dialogue est 34_toto.txt
Sardonnen
Messages postés89Date d'inscriptionlundi 29 avril 2002StatutMembreDernière intervention 6 décembre 2006 7 févr. 2006 à 15:40
ok super génial
je n'avais pas compris que c'etait le response.write qui ouvrait le fichier avec le nom réél présent sur le serveur et que le
Response.AddHeader("Content-Disposition","attachment; filename=" & id.substring(3))
te permettait de spécifier le nom de fichier que tu souhaites.
super cool!!!!
je te remercie Cyril pour ta patience et tes explications.
a+
Driche
Messages postés1Date d'inscriptionmardi 6 septembre 2005StatutMembreDernière intervention 1 mars 2007 1 mars 2007 à 16:58
Bonjour à tous les deux,
Tout d'abord bravo Cyril pour tes posts, débutant en ASP.NET ils m'ont bien aidé.
J'ai une application ASP.NET (code behind C#) dans laquelle j'ai intégré ton code pour le téléchargement de fichiers, mais j'ai un problème d'accents dans la boîte de dialogue de téléchargement. Les noms de fichiers semblent apparaitre en code page windows-1252 (Europe occidentale sous IE) alors que je voudrais les afficher en UTF-8.
J'ai essayé d'ajouter les lignes suivantes :
Response.Charset =
"UTF-8";
Response.ContentEncoding = System.Text.
Encoding.UTF8;
Response.HeaderEncoding = System.Text.
Encoding.UTF8;
Mais rien à faire, ça ne marche toujours pas !
Deuxième point :
Mon application contient une partie client Windows Form qui permet de stocker des documents dans une base SQL Server Express. Le contenu de ces documents est stocké dans un champ type "image" (champ binaire). J'ai un bout de code qui permet de récupérer le contenu et de reconstruire ces fichiers.
La partie ASP.NET permet à des utilisateurs de récupérer aussi ces fichiers (d'où le code de téléchargement).
Lorsque je stocke des fichiers pdf et que je les récupère avec l'appli windows j'arrive à les lire avec Adobe Reader 7, mais lorsque je les récupère en les téléchargeant sur le site, il est alors impossible de les lire avec cette même version d'Adobe Reader. Je me prends un message d'erreur disant que le fichier doit être endommagé. Mais la version 8, arrive à les ouvrir.