전체 요청 본문을 JSON으로 래핑하지 않기 때문에 multipart/form-data
단일 요청으로 JSON과 파일을 모두 게시하는 데 사용 하는 것이 충분하지 않다는 의미는 아닙니다 .
curl -F "metadata=<metadata.json" -F "file=@my-file.tar.gz" http://example.com/add-file
서버 측에서 (의사 코드에 Python 사용) :
class AddFileResource(Resource):
def render_POST(self, request):
metadata = json.loads(request.args['metadata'][0])
file_body = request.args['file'][0]
...
여러 파일을 업로드하려면 각각에 대해 별도의 "양식 필드"를 사용할 수 있습니다.
curl -F "metadata=<metadata.json" -F "file1=@some-file.tar.gz" -F "file2=@some-other-file.tar.gz" http://example.com/add-file
...이 경우 서버 코드는 것 request.args['file1'][0]
와request.args['file2'][0]
또는 많은 사람들에게 동일한 것을 재사용하십시오 :
curl -F "metadata=<metadata.json" -F "files=@some-file.tar.gz" -F "files=@some-other-file.tar.gz" http://example.com/add-file
...이 경우 request.args['files']
단순히 길이 2의 목록이됩니다.
또는 단일 필드를 통해 여러 파일을 전달하십시오.
curl -F "metadata=<metadata.json" -F "files=@some-file.tar.gz,some-other-file.tar.gz" http://example.com/add-file
...이 경우 request.args['files']
모든 파일을 포함하는 문자열이 될 것이며, 자신을 파싱해야합니다. 어떻게해야할지 확실하지 않지만, 어렵지 않거나 이전 방법을 사용하는 것이 좋습니다.
의 차이 @
와는 <
즉 @
, 반면에 파일이 업로드 파일로 첨부하려면 원인 <
텍스트 필드로 파일의 첨부합니다 내용.
추신 : 요청 curl
을 생성하는 방법으로 사용 POST
한다고해서 정확히 같은 HTTP 요청을 Python과 같은 프로그래밍 언어에서 보내거나 충분한 기능을 갖춘 도구를 사용하여 전송할 수는 없습니다.