28,391
社区成员
发帖
与我相关
我的任务
分享
String filepath = "D:\\mypic.jpg";//图片路径
String POST_URL ="http://file.chinadatapay.com/img/upload?appkey=2712f8c6f0ce9390b9edafc53e9d65b4";
HttpClient httpclient = new DefaultHttpClient();
HttpPost post = new HttpPost(POST_URL);
FileBody fileBody = new FileBody(new File(filepath));
MultipartEntity entity = new MultipartEntity();
entity.addPart("data", fileBody);
post.setEntity(entity);
HttpResponse response = httpclient.execute(post);
HttpEntity r_entity = response.getEntity();
String responseString = EntityUtils.toString(r_entity);
System.out.println("返回结果:" + responseString);
//你需要根据出错的原因判断错误信息,并修改
httpclient.getConnectionManager().shutdown();
{"msg":"上传成功","code":"10000","data":"b26eea6c29a0496ab3e86bfdd8c5695a","stacktrace":null,"success":true}
因为,该平台有缺陷,返回“上传成功”,实际却没有图片。所以,我正在询问平台商,是否真正收到了我们刚刚上传的照片。
Public Function Size()
Size = Me.stream.Size + Len(Me.boundary) + 4 ' 这里要修正一下,得+4 才是正确的
End Function
Function GetFileData(path)
With CreateObject("ADODB.Stream")
.Type = 1
.Mode = 3
.Open
.LoadFromFile path
.Position = 0
GetFileData = .Read(-1)
.Close
End With
End Function
Function StringFromBytes(bytes, cSet)
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.Write bytes
.Position = 0
.Type = 2
.Charset = cSet
StringFromBytes = .ReadText()
.Close
End With
End Function
Function GetBytes(str, cSet, bomLength)
With CreateObject("ADODB.Stream")
.Type = 2
.Mode = 3
.Charset = cSet
.Open
.Position = 0
.WriteText str
.Position = 0
.Type = 1
.Position = bomLength
GetBytes = .Read(-1)
.Close
End With
End Function
Class Multipart
Dim charset, bomLength, stream, boundary
Private Sub Class_Initialize()
Me.charset = "UTF-8"
Me.bomLength = 3
Set Me.stream = CreateObject("ADODB.Stream")
Me.stream.Mode = 3
Me.stream.Type = 1
Me.stream.Open
Me.boundary = "----WebKitFormBoundaryomATwYZzgiwmJSgy" ' 随便写一个,够复杂就行
End Sub
Sub WriteText(value)
Me.stream.Write GetBytes(value, Me.charset, Me.bomLength)
End Sub
Public Function Size()
Size = Me.stream.Size + Len(Me.boundary)
End Function
Public Function GetData()
Me.stream.Position = 0
With CreateObject("ADODB.Stream")
.Type = 1
.Mode = 3
.Open
.Position = 0
.Write Me.stream.Read(-1)
.Write GetBytes("--" & Me.boundary & "--", Me.charset, Me.bomLength)
.Position = 0
GetData = .Read(-1)
.Close
End With
Me.stream.Position = Me.stream.Size
End Function
Public Sub AddTextEntity(name, value)
Me.WriteText "--" & Me.boundary & vbCrLf & "Content-Disposition: form-data; name=""" & name & """" & vbCrLf & vbCrLf & value & vbCrLf
End Sub
Public Sub AddFileEntity(name, filePath, mime)
Me.WriteText "--" & Me.boundary & vbCrLf
Me.WriteText "Content-Disposition: form-data; name=""" & name & """; filename=""" & filePath & """" & vbCrLf
Me.WriteText "Content-Type: " & mime & vbCrLf & vbCrLf
Me.stream.Write GetFileData(filePath)
Me.WriteText vbCrLf
End Sub
Private Sub Class_Terminate()
Me.stream.Close
Set Me.Stream = Nothing
End Sub
End Class
Dim filePath, POST_URL, multidata, xhr
filePath = "E:\40x40.jpg"
POST_URL ="http://file.chinadatapay.com/img/upload?appkey=2712f8c6f0ce9390b9edafc53e9d65b4"
Set multidata = New Multipart
multidata.AddFileEntity "data", filePath, "image/jpeg"
Set xhr = CreateObject("WinHttp.WinHttpRequest.5.1")
xhr.Open "POST", POST_URL, False
xhr.SetRequestHeader "Content-Length", multidata.Size()
xhr.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & multidata.boundary
xhr.Send multidata.GetData()
Response.Write xhr.ResponseText