사진 - html file



VBA를 사용하여 HTML 양식의<input \ input>을 통해 파일 업로드 (2)

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

다음은 HTML 세그먼트입니다.

<input name="userfile" id="userfile" type="file">

https://ffff65535.com


ScriptUtils.ASPForm을 사용하여 ASP에서 업로드 된 파일을 사용할 수 있습니다. ScriptUtils.ASPForm은 최대 2GB의 데이터를 수용 할 수있는 고성능, 저 자원 소비 알고리즘을 포함합니다.

  1. http 및 multipart / form-data 문서를 사용하여 파일을 업로드하는 몇 가지 단계가 있습니다. 우선 우리는 디스크에서 파일을 읽어야합니다. Scripting.FileSystemObject를 사용하여 텍스트 데이터를 읽거나 ADODB.Stream을 사용하여 파일을 읽을 수 있습니다. GetFile 함수는 ADODB.Stream을 사용하여 작업을 수행합니다.

  2. 두 번째로 완료해야 할 작업은 다중 파트 / 양식 데이터 문서의 빌드입니다. 이 문서에는 여러 필드가 경계로 구분되어 있습니다. 각 필드에는 필드 이름, 파일 이름 및 소스 파일의 내용 유형에 대한 정보가 들어있는 자체 헤더가 있습니다. ADO Recordset 개체에는 AppendChunk라는 훌륭한 메서드가 있습니다.이 메서드를 사용하면 다중 파트 / 양식 데이터 문서 (열린 경계 + 머리글 + 파일 내용 + 경계 가까이)의 일부를 조인 할 수 있습니다. BuildFormData 함수에서 코드를 볼 수 있습니다.

  3. 마지막 작업은 multipart / form-data Content-Type 헤더가있는 서버에 게시 요청으로 multipart / form-data 문서를 보냅니다. 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

이 페이지를 참조하십시오.

http://www.mrexcel.com/forum/excel-questions/861695-using-xmlhttp-upload-file-api.html#post4192153


나는 InternetExplorer.Application COM 인터페이스의 Navigate 메서드를 사용하여 파일을 업로드하는 것과 같은 기술로 여러 날을 시험해 보았다.
Navigate에 대한 문서에서는 postdata 매개 변수를 지정하면 HTTP POST가 트리거되지만 내 경험에 따르면 Content-Type도 결정 요인입니다. Fiddler를 사용하여 Content-Type = multipart / form-data 일 때 POST 대신 GET HTTP 메소드를 일관되게 보내고 있음을 발견했습니다.

GET verb를 보내면 양식 데이터를 무시하고 URI 만 처리하도록 서버에 지시합니다.

이 페이지 는 HTTP 요청을보다 세밀하게 제어 할 수있는 XMLHTTP 개체를 사용하여 성공했음을 나타냅니다. 다음은이 기술을 보여주는 Powershell 코드입니다.

$http = (New-Object -ComObject "MSXML2.XMLHTTP") 
$http.Open("POST",$DestURL,$false)
$http.SetRequestHeader("Content-Type", "multipart/form-data; boundary=" + $boundary)
$http.Send($PostData) 




image-uploading