Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过<;上传文件;输入\输入>;用VBA实现HTML格式_Html_Vba_Excel_Upload_Image Uploading - Fatal编程技术网

通过<;上传文件;输入\输入>;用VBA实现HTML格式

通过<;上传文件;输入\输入>;用VBA实现HTML格式,html,vba,excel,upload,image-uploading,Html,Vba,Excel,Upload,Image Uploading,我试图上传一个图片文件到,但是,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

我试图上传一个图片文件到,但是,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
Sub-DownPDF()
Dim文件名为字符串:FileName=“C:\Users\310217955\Documents\pdfdown\SGSSI001\u HL1464\u 2011.pdf”
Dim DestURL作为字符串:DestURL=”https://www.newocr.com/"
Dim FieldName作为字符串:FieldName=“userfile”
调用UploadFile(DestURL、文件名、字段名)
端接头
'*******************上传-开始
'使用输入类型=文件上载文件
子上载文件(DestURL、文件名、字段名)
“场的边界。
'确保此字符串不在源文件中
常量边界=“------------------------------------0123456789012”
Dim文件内容,FormData
'将源文件作为二进制数据获取。
FileContents=GetFile(文件名)
'生成多部分/表单数据文档
FormData=BuildFormData(文件内容、边界、文件名、字段名)
'将数据发布到目标URL
IEPostBinaryRequest DestURL、FormData、边界
端接头
'使用文件内容和标题信息生成多部分/表单数据文档
函数BuildFormData(文件内容、边界、文件名、字段名)
Dim表单数据、预处理、采购订单
Const ContentType=“应用程序/上载”
'围绕多部分表单数据中的文件内容的两部分。
Pre=“-->”+边界+vbCrLf+mpFields(字段名、文件名、内容类型)
Po=vbCrLf+“--”+边界+“--”+vbCrLf
'使用记录集二进制字段生成表单数据
常数adLongVarBinary=205
Dim RS:Set RS=CreateObject(“ADODB.Recordset”)
RS.Fields.Append“b”,adLongVarBinary,Len(Pre)+LenB(FileContents)+Len(Po)
美国公开赛
艾德纽卢比
暗伦达
'将预字符串值转换为二进制数据
LenData=Len(预)
RS(“b”)。附件(StringThumb(Pre)和ChrB(0))
Pre=RS(“b”).GetChunk(LenData)
卢比(“b”)=“”
'将Po字符串值转换为二进制数据
LenData=Len(采购订单)
RS(“b”).附件(采购订单和ChrB(0))
Po=RS(“b”).GetChunk(LenData)
卢比(“b”)=“”
'加入前+文件内容+采购订单二进制数据
卢比(“b”)。附件(预)
RS(“b”).AppendChunk(文件内容)
卢比(“b”)。采购订单
RS.更新
FormData=RS(“b”)
RS.Close
BuildFormData=FormData
端函数
'使用IE将多部分/表单数据发送到URL
函数IEPostBinaryRequest(URL、FormData、边界)
'创建InternetExplorer
Dim IE:Set IE=CreateObject(“InternetExplorer.Application”)
'您可以取消注释下一行以查看表单结果
可见=真实
'将表单数据作为POST多部分/表单数据请求发送到URL
即,导航URL、FormData、_
“内容类型:多部分/表单数据;边界=“+boundary+vbCrLf”
在忙或准备状态4时执行
等待1,“上载到”&URL
环
'获取已接收上载的脚本的结果
出错时继续下一步
IEPostBinaryRequest=IE.document.body.innerHTML
”他说
端函数
'表单字段标题中的信息格式。
函数mpFields(字段名、文件名、内容类型)
用于多部分标题的“模板”模板
MPTemplate=“内容处置:表单数据;名称=”“{field}”“;”+_
“filename=”“{file}”“”+vbCrLf+_
“内容类型:{ct}”+vbCrLf+vbCrLf
暗淡
Out=Replace(MPTemplate,“{field}”,FieldName)
Out=Replace(Out,{file},文件名)
mpFields=Replace(Out,“{ct}”,ContentType)
端函数
子等待(秒,消息)
出错时继续下一步
CreateObject(“wscript.shell”)。弹出消息,秒,“,64
端接头
'将文件内容作为二进制数据返回
函数GetFile(文件名)
Dim Stream:Set Stream=CreateObject(“ADODB.Stream”)
Stream.Type=1'二进制
小溪,打开
Stream.LoadFromFile文件名
GetFile=Stream.Read
关闭
端函数
'将OLE字符串转换为多字节字符串
功能组别(S)
暗I,B
对于I=1到Len(S)
B=B&ChrB(Asc(中段,中段,中段,中段)
下一个
B=B
端函数
'****************上传-结束
“*******************支持
'基本脚本信息
子InfoEcho()
淡味精
Msg=Msg+“使用http和多部分/表单数据上载文件”&vbCrLf
Msg=Msg+“版权(C)2001安东宁·福勒,PSTRUH软件”和vbCrLf
Msg=Msg+“使用”&vbCrLf
Msg=Msg+“[cscript|wscript]fupload.vbs文件url[fieldname]”和vbCrLf
Msg=Msg+“要上载的文件…本地文件”&vbCrLf
Msg=Msg+“url…可接受上载数据的url”&vbCrLf
Msg=Msg+“fieldname…源表单字段的名称”。&vbCrLf
Msg=Msg+vbCrLf+CheckRequirements
Echo Msg
WScript.Quit
端接头
'检查是否安装了所有必需的对象
功能检查要求()
淡味精
Msg=“此脚本需要安装一些对象才能正常运行。”&vbCrLf
Msg=Msg&CheckOneObject(“ADODB.Recordset”)
Msg=Msg&CheckOneObject(“ADODB.Stream”)
Msg=Msg&CheckOneObject(“InternetExplorer.Application”)
CheckRequirements=Msg
'MsgBox Msg
端函数
'检查是否安装了一个对象。
函数CheckOneObject(oClass)
淡味精
出错时继续下一步
CreateObject类
如果Err=0,则Msg=“OK”Else Msg=“Error:”&错误说明
CheckOneObject=oClass&“-”&Msg&vbCrLf
端函数
这是HTML片段


您可以使用ScriptUtils.ASPForm在ASP中接受上载的文件。ScriptUtils.ASPForm包含高性能、低资源消耗的算法,可接受高达2GB的数据

  • 使用http和多部分/表单数据文档上传文件有一些步骤。首先,我们必须从磁盘读取文件。我们可以使用Scripting.FileSystemObject读取文本数据,或者使用ADODB.Stream读取任何文件。GetFile函数使用ADODB.Stream完成这项工作

  • 我们需要完成的第二项任务是构建多部分/表单数据文档。文档包含由边界分隔的多个字段。每个字段都有自己的标题,其中包含inform
    '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
    
    $http = (New-Object -ComObject "MSXML2.XMLHTTP") 
    $http.Open("POST",$DestURL,$false)
    $http.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + $boundary)
    $http.Send($PostData)