如何在curl命令中发送二进制文件URL而不是传递本地路径

如何在curl命令中发送二进制文件URL而不是传递本地路径

我正在尝试将 s3 存储桶上的二进制 .apk 文件发布到 POST API。

我知道的本地方式是:

curl -X POST https://xxx.example.com:443/api/storage/upload -H "Content-Type:application/octet-stream" --data-binary @file_name.file

当我尝试以下操作时,它不起作用

curl -X POST https://xxx.example.com:443/api/storage/upload -H "Content-Type:application/octet-stream" --data-binary @example.com/app-debug.apk

我低于错误。

Warning: Couldn't read data from file
Warning: "https://s3-eu-west-1.amazonaws.com/files.greenhouseci.com/projects/6d
Warning: 7f406a-2a65-4be0-83ee-75ca0afae7c9/builds/24f78eb5-819f-44d5-9c21-edce
Warning: 4dc9f253/artefacts/app-debug.apk", this makes an empty POST.

答案1

这里发生的情况是您滥用了@--data-binary选项的标志。 for非常清楚man pagecurl描述了它的用法

如果您以字母 开头数据@,则其余部分应该是要从中读取数据的文件名,或者-如果您想curl从中读取数据标准输入

您写的内容指示curl使用文件app-debug.apk从子目录调用example.com

curl ... --data-binary @example.com/app-debug.apk

然后它告诉您它找不到该文件,但随后继续完成命令的其余部分,导致空的POST

Warning: Couldn't read data from file
Warning: "https://s3-eu-west-1.amazonaws.com/files.greenhouseci.com/projects/6d
Warning: 7f406a-2a65-4be0-83ee-75ca0afae7c9/builds/24f78eb5-819f-44d5-9c21-edce
Warning: 4dc9f253/artefacts/app-debug.apk", this makes an empty POST.

没有任何地方说@可以用来引用 URI,因此您需要做的是自己获取工件,然后将POST其发送到您的服务器。像这些建议中的任何一个都可以工作

  1. 下载POST内容然后上传

    curl https://example.com/app-debug.apk >app-debug.apk
    curl -X POST https://xxx.example.com:443/api/storage/upload -H "Content-Type:application/octet-stream" --data-binary @app-debug.apk
    
  2. 流式传输 POST 内容并上传

    curl https://example.com/app-debug.apk |
        curl -X POST https://xxx.example.com:443/api/storage/upload -H "Content-Type:application/octet-stream" --data-binary @-
    

相关内容