繁体   English   中英

如何通过 API 上传图片?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM