使用 Guzzle 6 将文件上传到 API 端点

2024-01-02

我可以使用 Postman 将文件上传到 API 端点。

我正在尝试将其转换为从表单上传文件,使用 Laravel 上传文件并使用 Guzzle 6 发布到端点。

Screenshot of how it looks in Postman (I purposely left out the POST URL) enter image description here

以下是当您单击 POSTMAN 中的“生成代码”链接时生成的文本:

POST /api/file-submissions HTTP/1.1
Host: strippedhostname.com
Authorization: Basic 340r9iu34ontoeioir
Cache-Control: no-cache
Postman-Token: 6e0c3123-c07c-ce54-8ba1-0a1a402b53f1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW

----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="FileContents"; filename=""
Content-Type: 


----WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="FileInfo"

{ "name": "_aaaa.txt", "clientNumber": "102425", "type": "Writeoff" }
----WebKitFormBoundary7MA4YWxkTrZu0gW

以下是用于保存文件和其他信息的控制器功能。文件上传正确,我能够获取文件信息。

我认为我遇到的问题是使用正确的数据设置多部分和标题数组。

public function fileUploadPost(Request $request)
{
    $data_posted = $request->input();
    $endpoint = "/file-submissions";
    $response = array();
    $file = $request->file('filename');
    $name = time() . '_' . $file->getClientOriginalName();
    $path = base_path() .'/public_html/documents/';

    $resource = fopen($file,"r") or die("File upload Problems");

    $file->move($path, $name);

    // { "name": "test_upload.txt", "clientNumber": "102425", "type": "Writeoff" }
    $fileinfo = array(
        'name'          =>  $name,
        'clientNumber'  =>  "102425",
        'type'          =>  'Writeoff',
    );

    $client = new \GuzzleHttp\Client();

    $res = $client->request('POST', $this->base_api . $endpoint, [
        'auth' => [env('API_USERNAME'), env('API_PASSWORD')],
        'multipart' => [
            [
                'name'  =>  $name,
                'FileContents'  => fopen($path . $name, 'r'),
                'contents'      => fopen($path . $name, 'r'),
                'FileInfo'      => json_encode($fileinfo),
                'headers'       =>  [
                    'Content-Type' => 'text/plain',
                    'Content-Disposition'   => 'form-data; name="FileContents"; filename="'. $name .'"',
                ],
                // 'contents' => $resource,
            ]
        ],
    ]);

    if($res->getStatusCode() != 200) exit("Something happened, could not retrieve data");

    $response = json_decode($res->getBody());

    var_dump($response);
    exit();
}

我收到的错误,使用 Laravel 调试视图显示的屏幕截图:


您发布数据的方式是错误的,因此收到的数据格式错误。

狂饮文档 http://docs.guzzlephp.org/en/latest/request-options.html#multipart:

的价值multipart是一个由关联数组组成的数组,每个数组 包含以下键值对:

name:(字符串,必需)表单字段名称

contents:(StreamInterface/resource/string, required) 中使用的数据 表单元素。

headers:(数组)与表单元素一起使用的自定义标头的可选关联数组。

filename: (字符串) 可选 作为部分中的文件名发送的字符串。

使用上述列表之外的键并设置不必要的标头而不将每个字段分离到一个数组中将导致发出错误的请求。

$res = $client->request('POST', $this->base_api . $endpoint, [
    'auth'      => [ env('API_USERNAME'), env('API_PASSWORD') ],
    'multipart' => [
        [
            'name'     => 'FileContents',
            'contents' => file_get_contents($path . $name),
            'filename' => $name
        ],
        [
            'name'     => 'FileInfo',
            'contents' => json_encode($fileinfo)
        ]
    ],
]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Guzzle 6 将文件上传到 API 端点 的相关文章

  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • .htaccess 主要用于 localhost

    我在本地主机上使用 wamp server 虚拟主机名为www xyz com我有一个通过 git 设置的部署服务 它将代码部署到服务器上www xyz in 这是我的 htaccess 代码 RewriteEngine on Rewrit
  • Yii2:使用 Pjax POST 方法和分页在 Gridview 中搜索

    我是 yii2 的初学者 尝试在搜索按钮上使用 Pjax 来搜索 Gridview 中的字段 我已经使用 GET 方法完成此操作 但我想使用 POST 方法完成此操作 那么我该如何使用 Yii2 Pjax post 方法 和分页来做到这一点
  • 如何对 PHP 数组中的值进行排序/过滤?

    我需要 foreach 这个数组的值 My CODE 该代码的结果 Array 0 gt Array 0 gt Age Name 1 gt 22 Yrs Value 2 gt Ethnicity Name 3 gt Caucasian Va
  • 使用 cURL PHP 发布到 Facebook 用户的墙

    我正在存储 facebook 用户 ID 和访问令牌 我可以将此信息发布到选定用户的留言墙上吗 在这里找到以下代码 http developers facebook com docs reference api post http deve
  • Codeigniter $this->db->reconnect();用法

    I m not自动加载数据库 因为我的应用程序的大多数页面don t需要数据库处理 否则整个事情会变慢 我想要做的是 当数据库已经存在时 不要建立与数据库的新连接 而是使用它而不是打扰服务器数据库 那么我该如何实施 this gt db g
  • PHP中如何处理大于16位的值?

    我正在使用 SOAPclient 调用一个方法 该方法 远程外部 SOAP Web 服务 向我返回一个 19 位数字 我无法控制退回的内容 当我打印这个数字的值时 只有前 16 位数字是准确的 我尝试过类型转换 GMP 等 但是当 php
  • PSR-2 编码标准:为什么仅包含 PHP 的文件中没有 PHP 结束标记? [复制]

    这个问题在这里已经有答案了 我刚刚听说PSR 2编码标准 http www php fig org psr psr 2 在对此问题的评论中 是否有任何理由在方法和成员变量名称之前使用 public 关键字 https stackoverfl
  • 正确显示mySQL一对多查询结果

    我有两张桌子 TRIPS tripID clientID and LEGS legID depart arrive tripID TRIPS 与 LEGS 具有一对多关系 因为有多个legID s per tripID 我需要以以下格式显示
  • 如何从数据库生成 Doctrine 实体并使用 PSR-4 自动加载?

    使用教义2 5使用 PSR 4 自动加载并将已设计的数据库模式转换为实体类 注释 问题是将导出的文件放入正确的目录结构中 作曲家 json autoload psr 4 Application src require doctrine or
  • 通过php变量的值设置输入字段的值

    我有一个简单的 php 计算器 代码是 h1 align center This is PHP Calculator h1
  • 从 XML 获取 viewCount [重复]

    这个问题在这里已经有答案了 我目前正在使用YouTube API https developers google com youtube 来自 Google 我正在尝试获取 viewCount 数组 我已经尝试过这个 但一点运气都没有 He
  • 如何在 PHP 中制作简短的随机唯一密钥,例如 YouTube 视频 ID? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 有没有办法创建像 YouTube 视频网址中使用的唯一密钥 例如 https www youtube com watch v nWCh
  • Mysql为简单频繁查询创建排序索引性能

    我正在处理一个包含大约 400 万条消息条目的 mysql 表 并尝试根据时间戳选择最新的 50 条消息 另一个要求是返回的消息不以固定前缀开头 问题是单个查询大约占用 25 的 cpu 并且最多需要 1 5 秒 该查询经常由多个客户端执行
  • 解码Json数据数组并插入到mysql

    这个问题可能已经在这里问过 但我尝试搜索找不到它 我有如下 Json 数据 CityInfo CityCode 5599 Name DRUSKININKAI CityCode 2003 Name KAUNAS CityCode 2573 N
  • PHP - 递归搜索数组中的键和子键,成功时返回键['subkey]

    因此 我编写了一个函数 该函数可以在数组中深入搜索两个级别以查找键和子键对 基本上是在寻找key subkey 如果找到 则返回key subkey 我正在寻找一种以真正递归的方式执行此操作的方法 并根据需要进行尽可能多的深度搜索 直到到达
  • 我需要在服务器上安装 Composer 吗?

    我正在尝试部署 Laravel 应用程序 想知道 Composer 是否需要单独安装在服务器上 不 您可以在单独的服务器上构建应用程序 或者在团队中工作时在开发计算机上不太理想 然后将项目 包括已安装的供应商 复制到您的服务器上 事实上 在
  • REST API 路由最佳实践

    我想知道当订单是一种资源时 为以下场景创建 REST API 的最佳实践是什么 获取数据库中的所有订单 当然不是实际场景 仅供理解 通过订单ID获取订单 根据订单ID获取单个订单 单个 GET 路由是否可以用于所有这些场景 或者我们应该针对
  • 服务器端文件验证在 Yii.2.0 中不起作用

    Is the FileValidatorYii2 中的类只支持客户端验证 我使用代码编写了文件上传系统 在模型中 public function rules return allAllowedFileType safe allAllowed
  • 如何使用 monolog ElasticSearchHandler 登录 Laravel 应用程序

    Monolog 包含弹性搜索处理程序和格式化程序 但它作为自定义通道对 Laravel 的实现并不像 Laravel 文档网站上描述的那么简单 以下是如何执行此操作的简要分步说明 为您的弹性搜索日志记录创建一个配置文件 config ela

随机推荐