미해결 엑셀2016윈도우10
VBA 이미지파일 업로드 문제
VBA winhttp로 multipart/form-data로 특정 웹서버에 jpg이미지 파일을 업로드 하려고 합니다.
코드와 responseText는 아래와같습니다.
아무리 구글링을 해서 예제코드를사용해서 이미지 파일을 binary로 만들어 업로드해도 에러가 나네요. 문제 에러메제지도 특정되지 않아 뭐가 잘못된건지 모르겠네요.. 고수분들 도와주세요 ㅜㅜ
감사합니다.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''코드'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub UploadImage()
Dim WinHttp As New WinHttp.WinHttpRequest
Dim Header1 As String, Header2 As String
Dim Binary() As Byte, Buffer() As Byte
Dim BHeader1() As Byte, BHeader2() As Byte
Dim Size1 As Long, Size2 As Long, Size3 As Long
Boundary_str = "----WebKitFormBoundarylyGtAJWECF0qDL4d"
fpath = "C:\CNW_1000025913.jpg"
fname = "CNW_1000025913.jpg"
img_upload_url = "https://xxx.com/common/uploadImage.json"
Header1 = ""
Header1 = Header1 + "--" & Boundary_str & vbCrLf
Header1 = Header1 + "Content-Disposition: form-data; name=""fileArr""; filename=""" & fname & """" & vbCrLf
Header1 = Header1 + "Content-Type: image/jpeg" & vbCrLf & vbCrLf
Header2 = vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""imgKey""" & vbCrLf & vbCrLf
Header2 = Header2 + "ProductMainImageResizing" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""mode""" & vbCrLf & vbCrLf
Header2 = Header2 + "temp" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""baseKeyCd""" & vbCrLf & vbCrLf
Header2 = Header2 + "" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""filename""" & vbCrLf & vbCrLf
Header2 = Header2 + "fileArr" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & "--"
FN = FreeFile
Open fpath For Binary Access Read As #FN
ReDim Binary(LOF(1))
Get #FN, , Binary
Close #FN
BHeader1 = StrConv(Header1, vbFromUnicode)
BHeader2 = StrConv(Header2, vbFromUnicode)
'
Size1 = UBound(BHeader1)
Size2 = UBound(Binary)
Size3 = UBound(BHeader2)
ReDim Buffer(Size1 + Size2 + Size3 + 2)
CopyMemory Buffer(0), BHeader1(0), Size1 + 1
CopyMemory Buffer(Size1 + 1), Binary(0), Size2 + 1
CopyMemory Buffer(Size1 + Size2 + 2), BHeader2(0), Size3 + 1
With WinHttp
.Open "POST", img_upload_url
.SetRequestHeader "accept", "application/json, text/javascript, */*; q=0.01"
.SetRequestHeader "accept-encoding", "deflate, br"
.SetRequestHeader "accept-language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7"
.SetRequestHeader "connection", "keep-alive"
.SetRequestHeader "content-length", UBound(Buffer)
.SetRequestHeader "content-type", "multipart/form-data; boundary=" & Boundary_str
.SetRequestHeader "sec-ch-ua", """Whale"";v=""3"", "" Not;A Brand"";v=""99"", ""Chromium"";v=""96"""
.SetRequestHeader "sec-ch-ua-mobile", "?0"
.SetRequestHeader "sec-ch-ua-platform", """Windows"""
.SetRequestHeader "sec-fetch-site", "same-origin"
.SetRequestHeader "sec-fetch-mode", "cors"
.SetRequestHeader "sec-fetch-dest", "empty"
.SetRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
.SetRequestHeader "X-Requested-With", "XMLHttpRequest"
.Send Buffer
.WaitForResponse
outStr = .ResponseText
End With
Erase Binary
Erase Buffer
Erase BHeader1
Erase BHeader2
Debug.Print outStr
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Error 메세지'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
?outStr
{"errors":[{"status":"500","title":"2bf8c91c66f6cc00","source":{"pointer":"/common/uploadImage.json"},"meta":"yyyy.com"}]}
코드와 responseText는 아래와같습니다.
아무리 구글링을 해서 예제코드를사용해서 이미지 파일을 binary로 만들어 업로드해도 에러가 나네요. 문제 에러메제지도 특정되지 않아 뭐가 잘못된건지 모르겠네요.. 고수분들 도와주세요 ㅜㅜ
감사합니다.
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''코드'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Sub UploadImage()
Dim WinHttp As New WinHttp.WinHttpRequest
Dim Header1 As String, Header2 As String
Dim Binary() As Byte, Buffer() As Byte
Dim BHeader1() As Byte, BHeader2() As Byte
Dim Size1 As Long, Size2 As Long, Size3 As Long
Boundary_str = "----WebKitFormBoundarylyGtAJWECF0qDL4d"
fpath = "C:\CNW_1000025913.jpg"
fname = "CNW_1000025913.jpg"
img_upload_url = "https://xxx.com/common/uploadImage.json"
Header1 = ""
Header1 = Header1 + "--" & Boundary_str & vbCrLf
Header1 = Header1 + "Content-Disposition: form-data; name=""fileArr""; filename=""" & fname & """" & vbCrLf
Header1 = Header1 + "Content-Type: image/jpeg" & vbCrLf & vbCrLf
Header2 = vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""imgKey""" & vbCrLf & vbCrLf
Header2 = Header2 + "ProductMainImageResizing" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""mode""" & vbCrLf & vbCrLf
Header2 = Header2 + "temp" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""baseKeyCd""" & vbCrLf & vbCrLf
Header2 = Header2 + "" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & vbCrLf
Header2 = Header2 + "Content-Disposition: form-data; name=""filename""" & vbCrLf & vbCrLf
Header2 = Header2 + "fileArr" & vbCrLf
Header2 = Header2 + "--" & Boundary_str & "--"
FN = FreeFile
Open fpath For Binary Access Read As #FN
ReDim Binary(LOF(1))
Get #FN, , Binary
Close #FN
BHeader1 = StrConv(Header1, vbFromUnicode)
BHeader2 = StrConv(Header2, vbFromUnicode)
'
Size1 = UBound(BHeader1)
Size2 = UBound(Binary)
Size3 = UBound(BHeader2)
ReDim Buffer(Size1 + Size2 + Size3 + 2)
CopyMemory Buffer(0), BHeader1(0), Size1 + 1
CopyMemory Buffer(Size1 + 1), Binary(0), Size2 + 1
CopyMemory Buffer(Size1 + Size2 + 2), BHeader2(0), Size3 + 1
With WinHttp
.Open "POST", img_upload_url
.SetRequestHeader "accept", "application/json, text/javascript, */*; q=0.01"
.SetRequestHeader "accept-encoding", "deflate, br"
.SetRequestHeader "accept-language", "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7"
.SetRequestHeader "connection", "keep-alive"
.SetRequestHeader "content-length", UBound(Buffer)
.SetRequestHeader "content-type", "multipart/form-data; boundary=" & Boundary_str
.SetRequestHeader "sec-ch-ua", """Whale"";v=""3"", "" Not;A Brand"";v=""99"", ""Chromium"";v=""96"""
.SetRequestHeader "sec-ch-ua-mobile", "?0"
.SetRequestHeader "sec-ch-ua-platform", """Windows"""
.SetRequestHeader "sec-fetch-site", "same-origin"
.SetRequestHeader "sec-fetch-mode", "cors"
.SetRequestHeader "sec-fetch-dest", "empty"
.SetRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
.SetRequestHeader "X-Requested-With", "XMLHttpRequest"
.Send Buffer
.WaitForResponse
outStr = .ResponseText
End With
Erase Binary
Erase Buffer
Erase BHeader1
Erase BHeader2
Debug.Print outStr
End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Error 메세지'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
?outStr
{"errors":[{"status":"500","title":"2bf8c91c66f6cc00","source":{"pointer":"/common/uploadImage.json"},"meta":"yyyy.com"}]}
무
태
어
미
댓글 3
사용하시는 api 레퍼런스를 한번 살펴보세요. 아마 base64 형태가 아니여서 오류가 나는게 아닐까 생각됩니다
api에서 받아들이는 형식에 따라 다릅니다