在VBA中使用curl上传图片

时间:2020-03-21 11:01:58

标签: excel vba curl

我已经在支持API的网站上注册,并且已经测试了CURL命令行,对我来说效果很好

curl --location --request POST "https://api.imgbb.com/1/upload?key=APIKEY" --form "image=iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="

这是API信息页面 https://api.imgbb.com/

我不知道如何使用excel VBA发送等效命令行?我对这些东西是完全陌生的,我进行了很多搜索,无法了解事情的进展

我发现此链接可能有帮助,但它在VB.NET中 Help with Imgur API and VB.NET - Image POST

**现在我有了解决方案,并且已经像这样开发了它

Sub Test()
Dim v As Double, sPath As String, sAPIKey As String, sBase64 As String, cmd As String

sPath = ThisWorkbook.Path & "\Result.txt"
sAPIKey = "APIKEY"
sBase64 = ConvertFileToBase64(ThisWorkbook.Path & "\Logo.png")

cmd = Replace(Replace("curl --location --request POST ""https://api.imgbb.com/1/upload?key=¤"" --form ""image=$"" -o ", "¤", sAPIKey), "$", sBase64) & sPath
v = Shell(cmd)
Debug.Print cmd & " Completed" & vbCr & "Process " & v
End Sub

Public Function ConvertFileToBase64(strFilePath As String) As String
Const UseBinaryStreamType = 1

Dim streamInput: Set streamInput = CreateObject("ADODB.Stream")
Dim xmlDoc: Set xmlDoc = CreateObject("Microsoft.XMLDOM")
Dim xmlElem: Set xmlElem = xmlDoc.CreateElement("tmp")

streamInput.Open
streamInput.Type = UseBinaryStreamType
streamInput.LoadFromFile strFilePath
xmlElem.DataType = "bin.base64"
xmlElem.NodeTypedValue = streamInput.Read
ConvertFileToBase64 = Replace(xmlElem.Text, vbLf, "")

Set streamInput = Nothing
Set xmlDoc = Nothing
Set xmlElem = Nothing
End Function

这对于小尺寸效果很好,但对于大尺寸效果不佳。.example我有一个Logo.png,大小为545KB,这失败了。而其他较小的图片上传得很好

我已经手动尝试过,但是也失败了。似乎cms窗口允许的字符数限制,所以我无法在命令行中获取所有的base64字符串 enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用Shell

Sub mycurl()

  Dim var As Double, cmd As String
  cmd = "curl -I ""https://api.imgbb.com/"" -o imgbb.txt" ' head only
  var = Shell(cmd)
  MsgBox cmd & " completed" & vbCr & "Process " & var

End Sub

看起来该API接受二进制文件,因此不需要base64编码。试试

cmd = "curl --location --request POST ""https://api.imgbb.com/1/upload?" & _
      "key=" & sAPIKey & """ " & _
      "--form image=@""/path/Logo.png"" -o " & sPath & "/response.json"



相关问题