2017-04-07 1 views
0

Je crée un uploader pour une page où je dois utiliser ASP Classic et j'ai trouvé l'uploader de Jacob "Beezle" Gilley et ça marche, tant que c'est un fichier txt. Mais le problème se produit quand c'est un fichier pdf ou une image, et j'ai besoin de les télécharger.PDF est vide après Upload à partir de ASP Classic

Le problème est que l'exemple de fichier pdf est téléchargé à sa place mais il est vide. J'ai édité dans une partie du code original puisque j'ai besoin de l'encoder en UTF-8. Sinon, il est identique et je téléchargerai le code édité.

Public Sub SaveToDisk(sPath) 
    Dim oFS, oFile 
    Dim oStream 

    If sPath = "" Or FileName = "" Then Exit Sub 
    If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\" 

    Set oFS = Server.CreateObject("Scripting.FileSystemObject") 
    If Not oFS.FolderExists(sPath) Then Exit Sub 

    Set oStream = CreateObject("ADODB.Stream") 
    With oStream 
    .Type = 2 
    .Charset = "UTF-8" 
    .Mode = 3 
    .Open 
    .WriteText RSBinaryToString(FileData) 
    .SaveToFile sPath & FileName 
    .Close 
    End With 
    Set oStream = Nothing 
End Sub 

Comment puis-je résoudre ce problème, ou puis-je réparer même il? La méthode RSBinaryToString est crédité à Antonin Foller, http://www.motobit.com que j'ai trouvé pour aider à convertir en UTF-8. Whitout cela je ne peux même pas ouvrir les fichiers.

Répondre

0

J'ai trouvé une réponse à ma question.

Public Sub SaveToDisk(sPath) 
    Dim oFS, oFile 
    Dim oStream 
    Dim strText 

    If sPath = "" Or FileName = "" Then Exit Sub 
    If Mid(sPath, Len(sPath)) <> "\" Then sPath = sPath & "\" 

    Set oFS = Server.CreateObject("Scripting.FileSystemObject") 
    If Not oFS.FolderExists(sPath) Then Exit Sub 

    Set oStream = CreateObject("ADODB.Stream") 
    With oStream 
    .Type = 2 
    .Charset = "Windows-1252" 
    .Mode = 3 
    .Open 
    .Position = 0 
    .SetEOS 
    .WriteText RSBinaryToString(FileData), 0 
    .SaveToFile sPath & FileName, 2 
    .Close 
    End With 
    Set oStream = Nothing 
End Sub 

Au lieu d'utiliser Charset = UTF-8, utilisez Windows-1252. Fonctionne comme un charme.

+0

En fait, l'utilisation de jeux de caractères et de chaînes pour transporter le fichier PDF est erronée. Les PDF sont des données binaires, il devrait donc y avoir simplement un tableau d'octets ou quelque chose de similaire qui est écrit sans interférence avec les paramètres du jeu de caractères. Votre variante actuellement en cours d'exécution n'enchaîne heureusement que fort heureusement le codage et le décodage des données de manière correspondante (alors qu'il ne devrait pas être codé ou décodé du tout). – mkl