gpt4 book ai didi

vba - 通过 multipart-HTML-Post 上传 pdf 确实会更改文件

转载 作者:可可西里 更新时间:2023-11-01 17:04:48 26 4
gpt4 key购买 nike

我尝试使用以下代码通过 vba 的 multipart 上传 pdf:

Public Function sap_upload(ByVal par_objectID As String, ByVal par_description As String, ByVal par_filename As String) As Integer

Dim ls_param As String
Dim text As String
Dim line As String
Dim url As String
Dim web As MSXML2.XMLHTTP60
url = "http://someurl.xml"


Set web = CreateObject("MSXML2.XMLHTTP")


Call web.Open("POST", url, False)
Const Boundary As String = "AaB03x"
Call web.setRequestHeader("content-type", "multipart/form-data;boundary=" & Boundary)
Call web.setRequestHeader("Connection", "Keep-Alive")
Call web.setRequestHeader("cache-control", "no-cache")


Dim objStream, strData

Set objStream = CreateObject("ADODB.Stream")

objStream.Charset = "utf-8"
objStream.Open
objStream.LoadFromFile (par_filename)

strData = objStream.ReadText()

Dim getFileResult
getFileResult = GetFile(par_filename)

ls_param = vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""object_id""" & vbNewLine & vbNewLine & par_objectID & _
vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""description""" & vbNewLine & vbNewLine & par_description & _
vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""file""; filename=""" & par_filename & """" & vbNewLine & _
vbNewLine & strData & vbNewLine & vbNewLine & "--" & Boundary & "--" & vbNewLine

Call web.Send(ls_param)

end function

一切似乎都很好,但是当我尝试打开上传的文件时,pdf 阅读器告诉我该文件有密码。当我将这些文件与 notepad++ 进行比较时,我发现存在差异。 “文本部分”似乎是相同的,但“数据”部分似乎发生了变化。

这是原文的前几行:

%PDF-1.6
%âãÏÓ
37 0 obj <</Linearized 1/L 20597/O 40/E 14115/N 1/T 19795/H [ 1005 215]>>
endobj

这是上传的文件:

%PDF-1.6
%����
37 0 obj <</Linearized 1/L 20597/O 40/E 14115/N 1/T 19795/H [ 1005 215]>>
endobj

第二行不同。所有非文本的内容都会发生同样的情况。文件中心一行的另一个示例:

原文:

s†fŸ«¸"$ ºƒŸ44}2šÔ@Y•¨×Ç,(ŒA-$ÈÇÝŠëâÓˆea‰,Òs<W²«äÒv{ r8¸ o*=ËîÁ—œ   5´xÎ&:‘Š‚2bÁnu:˜²ºú/nâ¼æ·ig–£‘±Åô3]E

上传的文件:

s�f���"$ ���44}2��@Y����,(�A-$��݊��ӈea�,�s<W����v{ r8� o*=����� 5�x�&:���2b�nu:���/n���ig������3]E

那么:我做错了什么?我想与编码有关的东西。

最佳答案

在用户 omegastripes 的帮助下和他对这个例子的提示:File updload in post form in VBS我解决了我的问题。

必须读取文件的内容并将其发送到主机二进制文件(不像我那样作为字符串)

这段代码对我有用:

Public Function sap_addTest(ByVal par_objectID As String, ByVal par_description As String, ByVal par_filename As String) As Integer

Dim ls_param As String
Dim text As String
Dim line As String
Dim url As String
Dim web As MSXML2.XMLHTTP60
url = "http://someurl.xml"


Set web = CreateObject("MSXML2.XMLHTTP")


Call web.Open("POST", url, False)
Const Boundary As String = "AaB03x"
Call web.setRequestHeader("content-type", "multipart/form-data;boundary=" & Boundary)
Call web.setRequestHeader("ws-callingapplication", sys_db)
Call web.setRequestHeader("Connection", "Keep-Alive")
Call web.setRequestHeader("cache-control", "no-cache")


Dim baBuffer() As Byte

Dim bytData
Dim bytPayLoad

With CreateObject("ADODB.Stream")
.Type = 1
.Mode = 3
.Open
.LoadFromFile par_filename
bytData = .Read
End With

With CreateObject("ADODB.Stream")
.Mode = 3
.Charset = "Windows-1252"
.Open
.Type = 2
.WriteText vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""object_id""" & vbNewLine & vbNewLine & par_objectID
.WriteText vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""description""" & vbNewLine & vbNewLine & par_description
.WriteText vbNewLine & "--" & Boundary & vbNewLine & "Content-Disposition: form-data; name=""file""; filename=""" & par_filename & """" & vbNewLine
.WriteText vbNewLine
.Position = 0
.Type = 1
.Position = .Size
.Write bytData
.Position = 0
.Type = 2
.Position = .Size
.WriteText vbNewLine & vbNewLine & "--" & Boundary & "--" & vbNewLine
.Position = 0
.Type = 1
bytPayLoad = .Read
End With


Call web.Send(bytPayLoad)

'Debug.Print web.status
'Debug.Print web.responseText

End Function

关于vba - 通过 multipart-HTML-Post 上传 pdf 确实会更改文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52389091/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com