Загрузить изображение с помощью curl в VBA - PullRequest
2 голосов
/ 21 марта 2020

Я зарегистрировался на веб-сайте, который поддерживает 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 для отправки эквивалентной командной строки? Я совершенно новичок в таких вещах, и я много искал и не могу понять, как дела go на

Я нашел эту ссылку, которая может быть полезной, но она есть в VB.NET Справка с Imgur API и VB. NET - Изображение 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

Это прекрасно работает для небольших размеров но не для больших. Например, у меня Lo go .png, размер 545 КБ, и это не удается. В то время как другие меньшие изображения загружены хорошо

Я пробовал вручную, и это тоже не удалось. Похоже, в окне cms есть допустимое количество символов, поэтому я не могу получить всю строку base64 в командной строке enter image description here

1 Ответ

1 голос
/ 21 марта 2020

Вы можете использовать Оболочка

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"



Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...