[英]How to upload a picture via an API?
我正在尝试使用 API 将文件上传到 imgBB。
我收到错误消息:
{"status_code":400,"error":{"message":"空上传源。","code":130},"status_txt":"Bad Request"}
Sub EncodeFile()
Dim strPicPath As String
Dim TestFile As String
strPicPath = "X:\xxxxxxx\xxxxx.png"
Const adTypeBinary = 1 ' Binary file is encoded
' Variables for encoding
Dim objXML
Dim objDocElem
' Variable for reading binary picture
Dim objStream
' Open data stream from picture
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
objStream.LoadFromFile (strPicPath)
' Create XML Document object and root node
' that will contain the data
Set objXML = CreateObject("MSXml2.DOMDocument")
Set objDocElem = objXML.createElement("Base64Data")
objDocElem.DataType = "bin.base64"
' Set binary value
objDocElem.nodeTypedValue = objStream.Read()
' Get base64 value
TestFile = objDocElem.Text
With CreateObject("MSXML2.ServerXMLHTTP")
.Open "POST", "https://api.imgbb.com/1/upload?key=xxxxxxxxxxxxxxxxxxxxxxxx"
.setRequestHeader "Content-type", "application/json"
.send TestFile
MsgBox (.ResponseText)
End With
End Sub
正如@Toddleson 所说,POST 的内容应该是文件的 base64,分配给参数“image”。 您可以在 API 页面上的 CURL 示例中看到:
"image=R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
我会将 Base64 功能分解为可重复使用的 function:
Sub EncodeFile()
Dim strPicPath As String
strPicPath = "X:\xxxxxxx\xxxxx.png"
With CreateObject("MSXML2.ServerXMLHTTP")
.Open "POST", "https://api.imgbb.com/1/upload?key=xxxxxxxxxxxxxxxxxxxxxxxx"
'.setRequestHeader "Content-type", "application/json" 'not sending json...
.send "image=" & FileToBase64(strPicPath)
MsgBox .ResponseText
End With
End Sub
'return the contents of a file as Base64
Function FileToBase64(fPath As String) As String
Const adTypeBinary = 1 ' Binary file is encoded
Dim objStream As Object, objXML As Object, objDocElem As Object
Set objStream = CreateObject("ADODB.Stream")
objStream.Type = adTypeBinary
objStream.Open
objStream.LoadFromFile fPath
Set objXML = CreateObject("MSXml2.DOMDocument")
Set objDocElem = objXML.createElement("Base64Data")
objDocElem.DataType = "bin.base64"
objDocElem.nodeTypedValue = objStream.Read()
objStream.Close
FileToBase64 = objDocElem.Text
End Function
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.