Ich arbeite an einem Sub, das einen HTTP-Post verwendet, um eine Datei auf einen Server hochzuladen. Ich habe bereits den gesamten Code ausgearbeitet, um die Postanforderung tatsächlich zu senden, aber ich kann nicht herausfinden, wie ich die Datei in das entsprechende Format bringen kann. Der Server erwartet die Bytes der Datei als String, aber egal, welchen Ansatz ich zum Erstellen der Zeichenfolge verwende, die Werte entsprechen nicht den Erwartungen. HierDatei in VBA als Zeichenfolge lesen
ist der Code, den ich derzeit haben:
Sub Test()
Dim FileNum As Integer
Dim TestString As String
Dim TestBytes() As Byte
Dim TestByte As Variant
FileNum = FreeFile
Open ActiveDocument.Path & "\" & ActiveDocument.name For Binary Access Read As #FileNum 'Open document to write to string
ReDim TestBytes(LOF(FileNum) - 1)
Get FileNum, , TestBytes
Close FileNum
For Each TestByte In TestBytes
TestString = TestString & Hex(TestByte)
Next TestByte
Debug.Print TestString
End Sub
Die Ausgabe sieht ungefähr so aus (abgeschnitten, da die vollständige Zeichenfolge offensichtlich ziemlich lang):
504B3414060800021076DD8E8C9D130825B436F6E74656E745F54797065735D2E786D6C20...
Das Problem ist, die Beispiel Ausgang Ich habe es sagt sollte wie folgt aussehen:
UEsDBBQABgAIAAAAIQCuTjGvewEAAAIGAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAACA...
Ich nahm an, das Problem war, dass mein Testcode versucht, die Bytes als hex Werte zu codieren, während das Beispiel offensichtlich nicht in hex ist, aber wenn ich versuche, die Bytes der Datei direkt als String auszugeben, bekomme ich sehr viele ungültige Figuren. Hier ist der Code:
Sub Test()
Dim FileNum As Integer
Dim TestString As String
Dim TestBytes() As Byte
Dim TestByte As Variant
FileNum = FreeFile
Open ActiveDocument.Path & "\" & ActiveDocument.name For Binary Access Read As #FileNum 'Open document to write to string
TestString = String$(LOF(FileNum), Chr(32)) 'Fill string with blank space to set string length
Get FileNum, , TestString 'Write binary data from file to string
Debug.Print TestString
End Sub
Und hier ist der Ausgang:
PK ! vÝŽŒ p ...
Gibt es etwas, was ich bin fehlt, wie ich die Bytes kodieren kann zu bekommen Ausgabe, die die gleiche wie das Beispiel Ausgabe codiert ist? Wenn eine ähnliche Operation in einer anderen Sprache ausgeführt wird (z. B. Java mit readFileToString), wie wird die Zeichenfolge codiert?
'UEsDBB ... sieht aus wie Base64. Das Format wird durch den Header "Content-Transfer-Encoding" gesteuert. Sie müssen nicht codieren, aber Sie können die Bytes direkt schreiben - die Art und Weise, wie Sie dies tun, hängt davon ab, wie Sie die multipart/form-data-Anfrage erstellen (vorausgesetzt, das ist was Sie verwenden). –
(Ihre Hex-Methode ist auch dann ungültig, wenn sie erlaubt wäre, weil Sie einzelne Werte mit einer führenden '0' auffüllen müssen) –
Danke, das hilft sehr. Ich bin immer noch ziemlich unerfahren in der Programmierung im Allgemeinen, ich war mir Base64 nicht bewusst. – Toast