vb6 winhttp 上传文件
2016-03-09 17:31
1866 查看
winhttp 上传文件到web服务器
参考网址 http://www.newxing.com/Tech/Program/Script/709.html
Public Function PostFile(ByVal strurl As String, ByVal strFile As String, ByVal ContentType As String, ByRef strret As String) As Boolean Dim aHttpRequest As WinHttpRequest Dim i As Integer Dim name As String, boundary As String Dim filecontent Dim sBody On Error GoTo errH ''创建WinHttp.WinHttpRequest Set aHttpRequest = CreateObject("WinHttp.WinHttpRequest.5.1") aHttpRequest.Open "POST", strurl, False aHttpRequest.Option(WinHttpRequestOption_SslErrorIgnoreFlags) = &H3300 '截取文件名称 i = InStrRev(strFile, "\") + 1 name = Mid(strFile, i) boundary = "----WebKitFormBoundaryaEHpMn3lywBtjPfE" filecontent = GetFile(strFile) sBody = BuildFormData(filecontent, name, boundary, ContentType) aHttpRequest.SetRequestHeader "Content-Type", "multipart/form-data; boundary=" & boundary aHttpRequest.SetRequestHeader "Content-Length", Len(sBody) aHttpRequest.Send sBody aHttpRequest.WaitForResponse strret = aHttpRequest.ResponseText Set aHttpRequest = Nothing PostFile = True Exit Function errH: strret = Err.Description PostFile = False End Function '读取文件 Public Function GetFile(ByVal filename As String) Dim Stream: Set Stream = CreateObject("ADODB.Stream") Stream.Type = 1 'Binary Stream.Open Stream.LoadFromFile filename GetFile = Stream.Read Stream.Close End Function Public Function StringToMB(S) Dim i, B For i = 1 To Len(S) B = B & ChrB(Asc(Mid(S, i, 1))) Next StringToMB = B End Function Public Function BuildFormData(FileContents, ByVal filename As String, ByVal boundary As String, ByVal ContentType As String) Dim formdata As Variant Dim Pre As String, Po As String ', 'ContentType 'The two parts around file contents In the multipart-form data. Pre = "--" + boundary + vbCrLf + MapFields("file", filename, ContentType) Po = vbCrLf + "--" + boundary + "--" + vbCrLf 'Build form data using recordset binary field Const adLongVarBinary = 205 Dim RS: Set RS = CreateObject("ADODB.Recordset") RS.Fields.Append "b", adLongVarBinary, Len(Pre) + LenB(FileContents) + Len(Po) RS.Open RS.AddNew Dim LenData 'Convert Pre string value To a binary data LenData = Len(Pre) RS("b").AppendChunk (StringToMB(Pre) & ChrB(0)) Pre = RS("b").GetChunk(LenData) RS("b") = "" 'Convert Po string value To a binary data LenData = Len(Po) RS("b").AppendChunk (StringToMB(Po) & ChrB(0)) Po = RS("b").GetChunk(LenData) RS("b") = "" 'Join Pre + FileContents + Po binary data RS("b").AppendChunk (Pre) RS("b").AppendChunk (FileContents) RS("b").AppendChunk (Po) RS.Update formdata = RS("b") RS.Close BuildFormData = formdata End Function Private Function MapFields(ByVal FieldName As String, ByVal filename As String, ByVal ContentType As String) As String Dim MPTemplate 'template For multipart header MPTemplate = "Content-Disposition: form-data; name=""{field}"";" + _ " filename=""{file}""" + vbCrLf + _ "Content-Type: {ct}" + vbCrLf + vbCrLf Dim Out Out = Replace(MPTemplate, "{field}", FieldName) Out = Replace(Out, "{file}", filename) MapFields = Replace(Out, "{ct}", ContentType) End Function Private Sub Command1_Click() Dim strret As String '示例 PostFile "http://www.***.com/index.php", "d:\test.pdf", "application/pdf", strret MsgBox strret End Sub
参考网址 http://www.newxing.com/Tech/Program/Script/709.html
相关文章推荐
- VB6.0 SP6 AOD应用笔记——第一部分
- BarCode Reader SDK使用教程:用VB6实现条码的生成和读取
- VB6.0 对象库未注册解决办法
- VB6.0实现点击窗体的系统最小化或关闭按钮将窗体最小化到系统托盘区
- vb6.0 判断控件是否注册
- 让VB6.0中文企业版 IDE(集成开发环境)支持鼠标滚轮
- VB,VB.NET,C#对比
- 【请教】VLC 0.9.4中的VLCPlugin1控件为什么不显示视频?
- VB学习过程(一)在win7系统下VB6.0的安装
- 计算机毕业设计开发(vb,vb.net,c#)
- 各类编程语言的Hello World写法
- VB6.0 实现读取ini配置文件
- 关于VB6与Access数据库编程示例时。VB rs.Open strSQL, conn, 3, 3 报错的一个解决方法。
- VB学习笔记
- VB6 关闭时出现“VB6.EXE - 应用程序错误”解决办法
- VB6存取UTF-8文件
- VB6下Command获取SQL存储过程返回值
- VB6下的ado Command调用存储过程,读取返回值
- VB6.0软件调用VS C++ DLL问题解决
- C# 如何调用VB6.0编写的dll