使用 POST 方法将文件上传到 file.io

2023-12-02

我在 SO 找到了一个链接,可能会对这个查询产生影响在 VBA 中将图片上传到 file.io (HTTP Post)此链接中的代码

Sub UploadFilesUsingVBAORIGINAL()
     'this proc will upload below files to https://file.io/
          '  png, jpg, txt

        Dim fileFullPath As String
        fileFullPath = ThisWorkbook.Path & "\Sample.txt"

        POST_multipart_form_dataO fileFullPath
    End Sub

Private Function GetGUID() As String
    ' Generate uuid version 4 using VBA
    GetGUID = WorksheetFunction.Concat(WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(0, 4294967295#), 8), "-", WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(0, 65535), 4), "-", WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(16384, 20479), 4), "-", WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(32768, 49151), 4), "-", WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(0, 65535), 4), WorksheetFunction.Dec2Hex(WorksheetFunction.RandBetween(0, 4294967295#), 8))

End Function

Private Function GetFileSize(fileFullPath As String) As Long

    Dim lngFSize As Long, lngDSize As Long
    Dim oFO As Object, OFS As Object

    lngFSize = 0
    Set OFS = CreateObject("Scripting.FileSystemObject")

    If OFS.FileExists(fileFullPath) Then
        Set oFO = OFS.GetFile(fileFullPath)
        GetFileSize = oFO.Size
    Else
        GetFileSize = 0
    End If

    Set oFO = Nothing
    Set OFS = Nothing
End Function



Private Function ReadBinary(strFilePath As String)
    Dim ado As Object, bytFile
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1
    ado.Open
    ado.LoadFromFile strFilePath
    bytFile = ado.Read
    ado.Close

    ReadBinary = bytFile

    Set ado = Nothing
End Function


Private Function toArray(str)
    Dim ado As Object
     Set ado = CreateObject("ADODB.Stream")
     ado.Type = 2
     ado.Charset = "_autodetect"
     ado.Open
     ado.WriteText (str)
     ado.Position = 0
     ado.Type = 1
     toArray = ado.Read()
     Set ado = Nothing
End Function


Sub POST_multipart_form_dataO(filePath As String)

    Dim oFields As Object, ado As Object
    Dim sBoundary As String, sPayLoad As String, GUID As String
    Dim fileType As String, fileExtn As String, fileName As String
    Dim sName As Variant

    fileName = Right(filePath, Len(filePath) - InStrRev(filePath, "\"))
    fileExtn = Right(filePath, Len(fileName) - InStrRev(fileName, "."))

    Select Case fileExtn
     Case "png"
        fileType = "image/png"
     Case "jpg"
        fileType = "image/jpeg"
     Case "txt"
        fileType = "text/plain"
    End Select

    Set oFields = CreateObject("Scripting.Dictionary")
    With oFields
        .Add "qquuid", LCase(GetGUID)
        .Add "qqtotalfilesize", GetFileSize(filePath)
    End With

    sBoundary = String(27, "-") & "7e234f1f1d0654"
    sPayLoad = ""
    For Each sName In oFields
        sPayLoad = sPayLoad & "--" & sBoundary & vbCrLf
        sPayLoad = sPayLoad & "Content-Disposition: form-data; name=""" & sName & """" & vbCrLf & vbCrLf
        sPayLoad = sPayLoad & oFields(sName) & vbCrLf
    Next

    sPayLoad = sPayLoad & "--" & sBoundary & vbCrLf
    sPayLoad = sPayLoad & "Content-Disposition: form-data; name=""file""; " & "filename=""" & fileName & """" & vbCrLf
    sPayLoad = sPayLoad & "Content-Type: " & fileType & vbCrLf & vbCrLf & vbCrLf & vbCrLf & vbCrLf



     sPayLoad = sPayLoad & "--" & sBoundary & "--"


      Set ado = CreateObject("ADODB.Stream")
      ado.Type = 1
      ado.Open
      ado.Write toArray(sPayLoad)
      ado.Write ReadBinary(filePath)
      ado.Position = 0

    With CreateObject("MSXML2.ServerXMLHTTP")
        .Open "POST", "https://file.io", False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & sBoundary
        .send (ado.Read())
        Debug.Print .responseText
    End With

End Sub

任何人都可以尝试此代码,因为该网站是免费的。当我运行代码时,我在立即窗口中看到“成功”,并获得了上传文件的链接。 这似乎没有问题,但是当获取链接并将其放入浏览器中时,我收到 404 Page not found

我尝试手动上传相同的文件,对于我从此手动步骤中获得的链接来说,它运行良好,没有任何问题

有什么帮助吗?

也发表在这里https://chandoo.org/forum/threads/upload-file-to-file-io-using-post-method.43925/


在我看来,最终边界位于错误的位置,即文件内容之前。尝试

Sub UploadToIO()

    Const PATH = "c:\tmp\"
    Const FILENAME = "testimage.png"
    Const CONTENT = "image/png"
    Const URL = "https://file.io"
    
    ' generate boundary
    Dim BOUNDARY, s As String, n As Integer
    For n = 1 To 16: s = s & Chr(65 + Int(Rnd * 25)): Next
    BOUNDARY = s & CDbl(Now)
    
    Dim part As String, ado As Object
    part = "--" & BOUNDARY & vbCrLf
    part = part & "Content-Disposition: form-data; name=""file""; filename=""" & FILENAME & """" & vbCrLf
    part = part & "Content-Type: " & CONTENT & vbCrLf & vbCrLf
           
    ' read file into image
    Dim image
    Set ado = CreateObject("ADODB.Stream")
    ado.Type = 1 'binary
    ado.Open
    ado.LoadFromFile PATH & FILENAME
    ado.Position = 0
    image = ado.read
    ado.Close
        
    ' combine part, image , end
    ado.Open
    ado.Position = 0
    ado.Type = 1 ' binary
    ado.Write ToBytes(part)
    ado.Write image
    ado.Write ToBytes(vbCrLf & "--" & BOUNDARY & "--")
    ado.Position = 0
    'ado.savetofile "c:\tmp\debug.bin", 2 ' overwrite
    
    ' send request
    With CreateObject("MSXML2.ServerXMLHTTP")
        .Open "POST", URL, False
        .setRequestHeader "Content-Type", "multipart/form-data; boundary=" & BOUNDARY
        .send ado.read
        Debug.Print .responseText
    End With

    MsgBox "File: " & PATH & FILENAME & vbCrLf & _
           "Boundary: " & BOUNDARY, vbInformation, "Uploaded to " & URL

End Sub

Function ToBytes(str As String) As Variant

    Dim ado As Object
    Set ado = CreateObject("ADODB.Stream")
    ado.Open
    ado.Type = 2 ' text
    ado.Charset = "_autodetect"
    ado.WriteText str
    ado.Position = 0
    ado.Type = 1
    ToBytes = ado.read
    ado.Close

End Function
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 POST 方法将文件上传到 file.io 的相关文章

  • Php Curl HTTP POST REQUEST 使用嵌套键值对设置自定义标头

    如何使用 Curl 在 php 中设置此标头 CustomInfo 元素是数组 嵌套键值对 AuthenticationInfo 元素是数组 嵌套键值对
  • Excel 中使用通配符 {*} 进行 Vlookup

    我有下表 现在 我想检查主题是否具有数据中存在的任何文本 col F I used VLOOKUP A2 F F 1 0 但它正在给予 N A Try 公式为B2 SUM COUNTIF A2 F 2 F 3 gt 0 Edit SUM C
  • 如何暂停特定时间? (Excel/VBA)

    我有一个 Excel 工作表 其中包含以下宏 我想每秒循环一次 但如果我能找到执行此操作的函数 那就很危险了 难道不可能吗 Sub Macro1 Macro1 Macro Do Calculate Here I want to wait f
  • 二维数组作为字典的项目

    我想用一个项目的几个属性填充字典 例子 我正在考虑拥有Item 1 and Item 2 as Dictionary键与array这将保留其属性 我需要能够单独访问项目的每个属性 因此将它们连接为一个字符串不是一种选择 我正在考虑类似下面的
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些
  • 从VBA中的数组批量插入到sql中

    我正在尝试在 Excel 中构建一个按钮 将所选区域上传到 SQL Server 中的表中 第一行将自动视为列标题 这件事该怎么继续下去呢 我想要的是简单和超快的上传 这是我的想法 我将选择选定的区域 然后将其保存为 txt 文件 然后对其
  • Python HTTP Post 方法将响应返回为 magicmock 对象而不是值

    我正在尝试使用 POST 方法触发某些 API 后检查响应状态代码 响应状态代码是 Magicmock 实例类型 我正在使用在 python 2 中工作但引发 TypeError 的比较运算符检查状态代码是否在 400 和 500 之间在P
  • 如何获取数据透视表的 ListObject 对象?

    这个问题最初是作为answer https stackoverflow com a 21321664 2712565作者 休 西格雷夫斯 Hugh Seagraves 关于相关问题的文章 他 想要引用一个工作表上的列表对象 表格 而另一工作
  • 正在使用的 VBA 监视文件

    我正在寻找一些东西 Win API 调用或其他 来在文件可供编辑 即不再使用 时通知我 我应该设置一个计时器来按一定时间间隔检查文件还是有一个好方法对文件设置监视 FileSystemWatcher 没有帮助 Win32 FindFirst
  • 在Excel中显示毫秒

    我正在尝试在 Excel 宏中显示毫秒 我有一列整数 它们是以毫秒为单位的时间戳 例如 28095200 是上午 7 48 15 200 我想在它旁边创建一个新列 以保持运行平均值并以hh mm ss 000格式 Dim Cel As Ra
  • 如何在Excel中创建关系矩阵

    给定一个三元组列表 我想得到一个关系矩阵 如下所示 1 A X 1 A Y 1 B X A B C 1 B Z 1 X Y X Z 2 A Z gt 2 Z X Y 2 B X 3 Y Z 3 A Y 3 A Z 2 C Y 如何 可以在
  • 使用 C# 在 Excel 中查找和替换文本

    我想使用 C 在 Excel 中查找并替换一组文本 而且我希望此替换仅发生在第一行中的文本 我已经使用Google并找到了一些付费资源 例如Aspose API Spire Xls等 但我正在寻找开源资源或任何其他有效的方法来实现这一目标
  • 向用户显示多条验证消息

    在 MS Access 中 如何将从 SELECT 语句检索到的行存储在数组中 并在一个消息框中显示多行 Dim rSEL rSUM rDes As DAO Recordset Dim vItem id vQnty vSum As Inte
  • 在 Python 中绘制 Excel 中的数据

    我必须从 Excel 文件中读取和绘制数据的代码是这样的 import pandas as pd import matplotlib pyplot as plt excel file file1 xlsx file1 pd read exc
  • 通过 Excel VBA 保存并关闭 powerpoint

    下面的代码根据定义的名称创建多个图表 然后打开具有这些定义的名称的 powerpoint 文件并转储到图表中 除了最后一部分之外 一切都正常 保存并关闭文件 我已将尝试保存和关闭文件的尝试标记为绿色 任何帮助表示赞赏 Sub Slide19
  • 在单元格更改时循环遍历一系列单元格,以将序列中的下一个数字显示为单元格的新值

    我了解如何循环范围 For Each cell In Range A1 A5 If condition Then End If Next 我知道 OnChange 事件 Private Sub Worksheet Change ByVal
  • django ajax post 403被禁止

    使用 django 1 4 当我尝试从我的 javascript 做我的 django 服务器上的帖子时 我收到 403 错误 我的 get 工作正常 尽管问题仅出在帖子上 也尝试过 csrf exempt但没有运气 更新 我现在可以发布我
  • 如何根据文本框值过滤列表框值

    我在用户窗体上有一个文本框和一个列表框 我想根据我在文本框中输入的值过滤列表框中的值 名为 TMP 的工作表具有值 我根据文本框更改事件对其进行过滤 但在将该值添加到列表框中时它 会自动退出 Private Sub Textbox1 Cha
  • VBA删除列中的单元格并根据单元格的值左移?

    如果单元格为空 如何删除 B 列 和左移 中的单元格 下面是我所拥有的 但它给出了 应用程序定义或对象定义的错误 Sub DeleteCellShiftLeft For i 1000 To 1 Step 1 If Cells i B Val
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res

随机推荐

  • 如何在条形图上制作垂直角? [复制]

    这个问题在这里已经有答案了 有没有一种简单的方法可以将圆角放置在 D3 垂直条形图中的条形顶部 我一直在使用 attr rx 3 这似乎会影响 Bar 的所有四个角 您无法指定要在 SVG 中圆化哪些角 rx将影响所有 4 个角 唯一的解决
  • 从 URL Google 地图获取经纬度

    我需要一种方法来找出谷歌地图中提供其链接的地点的纬度 经度 或者 如果可能的话 我可以在地图上绘制应用程序内的点 或者使用某种意图共享谷歌地图的纬度经度 以便我可以从应用程序内接收它 上述任何一种可能是直接或间接的吗 简而言之 我有一个谷歌
  • iPhone 中的多人游戏 - 概念、策略、设计? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想为 iphone 开发一款在线多人游戏 我开发了两个 iPhone 应用程序 但它们不是游戏 所以这是我的第一个游戏 所以基本上我对在线多人游戏如何在iPhone上运行一无所
  • 计算数组逗号分隔值

    我正在使用此函数来获取 WordPress 中的自定义元字段数组 my var get meta values keywords if empty my var meta counts array foreach my var as met
  • 如何在私有和受保护访问修饰符之间进行选择以封装基类和子类之间的成员?

    我正在尝试一个在我的内部函数中使用私有值的项目 过去我只使用公共参数 但我注意到当使用尽可能多的私有参数时 混淆效果会更好 我的问题是关于家长 儿童课程 在我的主类中 我定义了所有参数如下 public class MyFatherClas
  • 无法在 Selenium 和 Java 中使用 className 定位元素

    我想使用 Selenium 中的类名来定位网页的元素 这是我尝试过的网络元素
  • PHP 中的 $_FILES 数组为空

    我正在尝试通过 PHP 脚本上传文件 但我的 FILES 数组始终为空 文件 HTML 输入元素的 POST 数据条目具有文件名 只是在我的本地系统上没有创建文件 我已验证对临时文件夹的写访问权限并明确设置它 我检查了 phpinfo 以确
  • 更改 Flutter AlertDialog 中操作部分的背景颜色

    我是 Flutter 新手 正在尝试自定义警报对话框材料飞镖的小部件 有多种方法可以设置整个对话框的背景颜色 有没有一种方法可以仅设置对话框的某些部分的背景颜色 从附图来看 对话框的操作部分的背景颜色应该不同 尝试下面的代码希望对您有帮助
  • 需要一种方法在 Python 中加载嵌入的、转义的 JSON 字符串[重复]

    这个问题在这里已经有答案了 我必须解析以下 JSON 字符串 JobDescription project 1322 vault qa 122 如果我尝试使用 json loads 我会得到以下信息 gt gt gt import json
  • 打印 syms / matlabFunction 慢

    我在尝试使符号替换速度更快时遇到了很多麻烦 也就是说 替换符号表达式中的变量并得到双精度值 我正在创建一个复杂的函数 f 并计算它的雅可比 df 这以合理的速度进行 我可以将其保存到文件中 但是 当我尝试使用 matlabFunction
  • 创建一个突出显示当前选项卡的 php 菜单

    所以我在 php 文件中有一个菜单 如下所示 这是整个文件 我对 PHP 完全陌生 菜单 php li a href span Home span a li li a href http blog me net span Blog span
  • 与 for 循环一起使用的 String join() 方法

    我需要你的帮助 因为我不明白为什么可以使用join 方法与for循环作为参数 Ex join str x for x in list Python 文档 str join iterable 返回一个字符串 它是可迭代中字符串的串联 A Ty
  • 使用 ProcessBuilder 运行 .java 文件

    我是一名在 Windows XP 上的 Eclipse 中工作的新手程序员 我需要运行多个进程 这将是多计算机系统的模拟 我最初的破解对多个类使用了多个线程 但现在我尝试用进程替换线程 从我的阅读中 我发现 ProcessBuilder 是
  • 内容可编辑光标位置

    我有一个内容可编辑的 div 我希望单击编辑按钮 光标出现在 div 的开头 在它出现在末尾的那一刻 li style display list item class menu item div class Dior div li
  • 如何获取任何文件/文件夹的系统图标

    如何检索与文件 文件夹关联的系统图标 以便 我可以在文件 文件夹名称旁边的列表视图中显示它吗 你需要使用Icon ExtractAssociatedIcon Icon icon Icon ExtractAssociatedIcon file
  • 使用 setInterval() 进行简单的连续轮询

    对于需要按设定的时间间隔刷新向用户呈现的部分数据的简单 Web 应用程序 仅使用是否有任何缺点setInterval 从端点获取 JSON 而不是使用适当的轮询框架 举个例子 假设我每 5 秒刷新一次处理作业的状态 从我的评论来看 I wo
  • Windows Phone-首次如何设置LocalSettings?

    在桌面应用程序或 Web 项目项目中 有 App configs 和 Web configs 文件用于存储设置 这些设置是在开发时 或以后的任何时候 设置的 但如果发生这种情况 则始终是一次操作 在 Windows Phone 8 1 XA
  • 如何将 Azure 移动应用服务与现有 SQL 数据库结合使用

    我已经阅读了许多演示如何使用 Azure 移动服务的文章和教程 但我对很多事情还不清楚 我有一个使用 Azure SQL 数据库并通过 Azure 发布的现有 Web 应用程序 我正在尝试将已经创建的数据库集成到我正在开发的 Xamarin
  • 有人写过线程安全的 BindingList 吗?

    目前 我在多个线程上修改 IBindingList 时遇到异常 在我编写自己的版本之前 有人有线程安全版本吗 我想你会发现这是一项极其困难的任务 更简单的方法是通过以下方式防止多线程访问lock void AddItemToList obj
  • 使用 POST 方法将文件上传到 file.io

    我在 SO 找到了一个链接 可能会对这个查询产生影响在 VBA 中将图片上传到 file io HTTP Post 此链接中的代码 Sub UploadFilesUsingVBAORIGINAL this proc will upload