Adh*_*hil 5 html upload vba image-uploading excel-vba
我正在尝试将图片文件上传到OCR网站,但是,PDF文件不会上传到网站.
我使用以下代码来实现它,下面是HTML段:
Sub DownPDF()
Dim FileName As String: FileName = "C:\Users\310217955\Documents\pdfdown\SGSSI001_HL1464_2011.pdf"
Dim DestURL As String: DestURL = "https://www.newocr.com/"
Dim FieldName As String: FieldName = "userfile"
Call UploadFile(DestURL, FileName, FieldName)
End Sub
'******************* upload - begin
'Upload file using input type=file
Sub UploadFile(DestURL, FileName, FieldName)
'Boundary of fields.
'Be sure this string is Not In the source file
Const Boundary = "---------------------------0123456789012"
Dim FileContents, FormData
'Get source file As a binary data.
FileContents = GetFile(FileName)
'Build multipart/form-data document
FormData = BuildFormData(FileContents, Boundary, FileName, FieldName)
'Post the data To the destination URL
IEPostBinaryRequest DestURL, FormData, Boundary
End Sub
'Build multipart/form-data document with file contents And header info
Function BuildFormData(FileContents, Boundary, FileName, FieldName)
Dim FormData, Pre, Po
Const ContentType = "application/upload"
'The two parts around file contents In the multipart-form data.
Pre = "--" + Boundary + vbCrLf + mpFields(FieldName, 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
'sends multipart/form-data To the URL using IE
Function IEPostBinaryRequest(URL, FormData, Boundary)
'Create InternetExplorer
Dim IE: Set IE = CreateObject("InternetExplorer.Application")
'You can uncoment Next line To see form results
IE.Visible = True
'Send the form data To URL As POST multipart/form-data request
IE.Navigate URL, , , FormData, _
"Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf
Do While IE.Busy Or IE.readyState <> 4
Wait 1, "Upload To " & URL
Loop
'Get a result of the script which has received upload
On Error Resume Next
IEPostBinaryRequest = IE.document.body.innerHTML
'IE.Quit
End Function
'Infrormations In form field header.
Function mpFields(FieldName, FileName, ContentType)
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)
mpFields = Replace(Out, "{ct}", ContentType)
End Function
Sub Wait(Seconds, Message)
On Error Resume Next
CreateObject("wscript.shell").Popup Message, Seconds, "", 64
End Sub
'Returns file contents As a binary data
Function GetFile(FileName)
Dim Stream: Set Stream = CreateObject("ADODB.Stream")
Stream.Type = 1 'Binary
Stream.Open
Stream.LoadFromFile FileName
GetFile = Stream.Read
Stream.Close
End Function
'Converts OLE string To multibyte string
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
'******************* upload - end
'******************* Support
'Basic script info
Sub InfoEcho()
Dim Msg
Msg = Msg + "Upload file using http And multipart/form-data" & vbCrLf
Msg = Msg + "Copyright (C) 2001 Antonin Foller, PSTRUH Software" & vbCrLf
Msg = Msg + "use" & vbCrLf
Msg = Msg + "[cscript|wscript] fupload.vbs file url [fieldname]" & vbCrLf
Msg = Msg + " file ... Local file To upload" & vbCrLf
Msg = Msg + " url ... URL which can accept uploaded data" & vbCrLf
Msg = Msg + " fieldname ... Name of the source form field." & vbCrLf
Msg = Msg + vbCrLf + CheckRequirements
WScript.Echo Msg
WScript.Quit
End Sub
'Checks If all of required objects are installed
Function CheckRequirements()
Dim Msg
Msg = "This script requires some objects installed To run properly." & vbCrLf
Msg = Msg & CheckOneObject("ADODB.Recordset")
Msg = Msg & CheckOneObject("ADODB.Stream")
Msg = Msg & CheckOneObject("InternetExplorer.Application")
CheckRequirements = Msg
' MsgBox Msg
End Function
'Checks If the one object is installed.
Function CheckOneObject(oClass)
Dim Msg
On Error Resume Next
CreateObject oClass
If Err = 0 Then Msg = "OK" Else Msg = "Error:" & Err.Description
CheckOneObject = oClass & " - " & Msg & vbCrLf
End Function
Run Code Online (Sandbox Code Playgroud)
这是HTML细分.
<input name="userfile" id="userfile" type="file">Run Code Online (Sandbox Code Playgroud)
您可以使用 ScriptUtils.ASPForm 接受 ASP 中上传的文件。ScriptUtils.ASPForm包含高性能、低资源消耗的算法,最多可以接受2GB的数据。
使用 http 和 multipart/form-data 文档上传文件有一些步骤。首先我们必须从磁盘读取文件。我们可以使用 Scripting.FileSystemObject 来读取文本数据,或者使用 ADODB.Stream 来读取任何文件。GetFile 函数使用 ADODB.Stream 完成这项工作。
我们需要完成的第二个任务是构建 multipart/form-data 文档。该文档包含由边界分隔的多个字段。每个字段都有自己的标头,其中包含有关源文件的字段名称、文件名和内容类型的信息。ADO Recordset 对象有一个很棒的方法 AppendChunk,它允许您连接多部分/表单数据文档的各个部分(开放边界 + 标题 + 文件内容 + 关闭边界)。您可以在 BuildFormData 函数中看到代码。
最后一个任务是将 multipart/form-data 文档作为 post 请求发送到带有 multipart/form-data Content-Type 标头的服务器。我们至少可以使用两个对象来发送 POST 请求 - XMLHttp 或 InternetExplorer。该脚本使用 InternetExplorer.Application 对象的 Navigate 方法。您可以在 IEPostBinaryRequest 函数中看到代码
请查看下面的链接以获取更多信息。
http://www.motobit.com/tips/detpg_uploadvbsie/
GetFile 方法正在将文件转换为 UTF-8。Pdf将超过128字节,您需要将其转换为多字节字符串
'Converts OLE string To multibyte stringFunction StringToMB(S)
Dim I, B
For I = 1 To Len(S)
B = B & ChrB(Asc(Mid(S, I, 1)))
Next
StringToMB = B End Function
Run Code Online (Sandbox Code Playgroud)
请参考此页面
http://www.mrexcel.com/forum/excel-questions/861695-using-xmlhttp-upload-file-api.html#post4192153
| 归档时间: |
|
| 查看次数: |
1676 次 |
| 最近记录: |