2009-11-11 22 views
3

J'essaie de sortir un fichier PDF en utilisant le côté serveur javascript (ASP). La méthode actuelle j'utilise est:Ecrit des données binaires en utilisant javascript sur le serveur

xfile=Server.MapPath(lib.fso.GetTempName()) 
xf=lib.fopen(xfile,"wb"); 
lib.fwrite(xf,this.buffer); 
lib.fclose(xf); 
outB = Server.CreateObject("ADODB.Stream") 
outB.Type = 1 
outB.Open() 
outB.LoadFromFile (xfile) 
Response.BinaryWrite(outB.Read()) 
outB.Close() 
lib.fso.DeleteFile(xfile); 

Cela fonctionne, mais nécessite un accès en écriture sur le serveur. Est-il possible de faire la même chose sans écrire dans un fichier?

Je havn't été en mesure de comprendre comment convertir la chaîne en un this.bufferarray of byte que je peux alors écrire en utilisant Response.BinaryWrite sans écrire à un fichier.

Répondre

0

Ma solution consistait à utiliser VBScript.

remplacer le code ci-dessus avec:

Response.BinaryWrite(StringToMultiByte(this.buffer)); 

et l'ajouter à la fin du fichier:

<script language="vbscript" runat="server"> 

function StringToMultiByte(S) 
    Dim i, MultiByte 
    For i=1 To Len(S) 
    MultiByte = MultiByte & ChrB(Asc(Mid(S,i,1))) 
    Next 
    StringToMultiByte = MultiByte 
End function 

</script> 
1

Pourquoi ne pas utiliser simplement: -

Response.Write(this.buffer) 

En supposant que le codepage de la réponse est définie correctement (c'est-à-dire la même que dans la locale que le VBScript est en cours d'exécution), puis Response.Write shou Faites la même conversion que votre StringToMultiByte.

Je suppose que vous avez essayé cela et n'a pas fonctionné. Si oui, je pense vraiment que vous avez besoin de regarder pourquoi c'est plutôt essayer cette utilisation étrange de BinaryWrite. Actuellement, votre solution va tuer votre serveur.

+0

Pourriez-vous être plus clair sur "aller tuer votre serveur"? J'ai essayé la méthode Response.write, mais elle a créé des fichiers PDF corrompus. Je soupçonne que cela est dû à la façon dont les images sont codées et la sortie en texte. Je parierais que Response.write fait une sorte d'encodage qui corrompt les données d'image comme il est écrit dans le tampon de sortie. – alumb

+0

voir: http://stackoverflow.com/questions/1732149/writing-out-a-null-in-javascript – alumb