HTTP를 통해 파일을 multipart / form-data로 업로드하기위한 Linux 명령 줄 도구?


25

wget에 --post-file옵션이 있음을 알 수 있지만 맨 페이지에는

Wget은 현재 POST 데이터 전송을위한 다중 파트 / 양식 데이터를 지원하지 않습니다. application / x-www-form-urlencoded 만 해당됩니다. 단 하나 --post-data--post-file지정해야합니다.

multipart / form-data에 파일을 업로드하는 비슷한 방법이 있습니까?

답변:


31

컬 사용 :

curl -F "file=@localfile;filename=nameinpost" url.com

17

wget으로 만 수행 할 수 있습니다. 최소한 버전 1.13.4 이상일 수도 있습니다. --post-file 옵션을 사용하면 포스트 데이터 파일이 올바르게 구성되어있는 한 보낼 파일을 지정할 수 있습니다.

나는 또한 바이너리 파일로 이것을 테스트했으며 예상대로 작동합니다. 파일을 base64로 인코딩 할 필요는 없지만 파일에 경계가 없는지 확인해야합니다.

이 작업을 수행하는 데 필요한 최소 명령은 다음과 같습니다.

wget --header="Content-type: multipart/form-data boundary=FILEUPLOAD" --post-file postfile http://domain/uploadform

포스트 데이터 파일에는 다음과 같은 내용이 포함되어야합니다.

--FILEUPLOAD
Content-Disposition: form-data; name="comment"

I love uploading files!

--FILEUPLOAD
Content-Disposition: form-data; name="uploadFile"; filename="myfile.bin"; 
Content-Type: application/octet-stream
Media Type: application/octet-stream

Give me some automated file upload action!

--FILEUPLOAD--

여기에서 많은 세부 사항이 중요합니다.

  1. 게시 데이터 파일의 줄은 \ r \ n으로 끝납니다. 파일 컨텍스트 내의 데이터는 예외입니다.
  2. 포스트 데이터의 모든 BOUNDARY 속성은 wget 호출의 BOUNDARY 값과 일치 해야합니다 . (이 예에서 FILEUPLOAD)
  3. 모든 경계는 두 개의 하이픈 "-"으로 시작하고 \ r \ n으로 끝납니다.
  4. 마지막 경계에는 두 개의 추가 하이픈 "-"이 붙고 \ r \ n으로 끝납니다.
  5. 각 데이터, 파일 내용 또는 매개 변수 값은 빈 줄 "\ r \ n"으로 둘러싸여 있습니다.

일부 통제 된 환경에는 문제가 없지만 말리지 않기 때문에 이것이 누군가를 도울 수 있다고 생각했습니다.


바이너리 파일로 wget을 사용할 수 없었습니다. 포스트 데이터 파일의 텍스트 부분을 작성하고 저장하고 사용 cat pic.jpg >> postdata하고 메모장 ++에로드하고 마지막 경계 + '-'+ EOL을 추가했습니다. W3C 참조
클로이

@ Chloe, 나는 다른 프로젝트를 위해 이것을 다시 방문해야했으며 이번에는 바이너리 파일이 필요했고 예상대로 작동한다는 것을 알았습니다. 간단한 PHP 파일 업로드 페이지를 만든 다음 브라우저를 통해 먼저 파일 크기를 얻은 다음 wget을 사용한 결과와 비교했습니다. 길 잃은 줄 바꿈으로 인해 전체 프로세스가 실패 할 수 있기 때문에 동일한 작업을 수행하는 것이 좋습니다.
tu-Reinstate Monica-dor du du

1
세미콜론이 없습니다. ; "경계 = 파일 업로드 다중 / 폼 데이터 컨텐츠 형"그것은 파이썬 토네이도 --header = 문제 발생
FlappySocks
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.