로컬 경로를 전달하는 대신 컬 명령으로 바이너리 파일 URL을 보내는 방법

로컬 경로를 전달하는 대신 컬 명령으로 바이너리 파일 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 page명확하게 설명합니다.curl

데이터를 문자로 시작하는 경우 @나머지는 데이터를 읽으려는 파일 이름이거나 데이터를 읽으 -려는 파일 이름이어야 합니다.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 @-
    

관련 정보