Tôi đang sử dụng Apache HttpComponents v4.3.3 (maven httpclient và httpmime). Tôi cần tải lên tệp có một số siêu dữ liệu. Lệnh curl, hoạt động, trông giống như sau.làm cách nào để tạo và đăng yêu cầu http nhiều phần/hỗn hợp bằng cách sử dụng Apache HttpComponentst?
curl -k -i -H "Loại nội dung: multipart/mixed" -X POST --form 'field1 = val1' --form 'field2 = val2' --form 'file = @ somefile. zip; type = application/zip 'https://www.some.domain/
Tôi đã thử bắt chước bài đăng này như sau.
HttpEntity entity = MultiPartEntityBuilder
.create()
.addPart("field1",new StringBody("val1",ContentType.TEXT_PLAIN))
.addPart("field2",new StringBody("val2",ContentType.TEXT_PLAIN))
.addPart("file", new FileBody(new File("somefile.zip"), ContentType.create("application/zip"))
.build();
HttpPost post = new HttpPost("https://www.some.domain");
post.addHeader("Content-Type", "multipart/mixed");
Tuy nhiên, sau khi tôi sử dụng HttpClient để thực hiện HttpPost, tôi nhận được ngoại lệ sau (mã máy chủ cũng được Java chạy trên Jetty).
org.apache.commons.fileupload.FileUploadException: yêu cầu đã bị từ chối vì không có ranh giới nhiều phần dữ liệu đã được tìm thấy
Khi tôi thêm một dấu vết cuộn tròn
curl - trace - -k -i -H "Kiểu nội dung: multipart/mixed" -X POST - form 'field1 = val1' --form 'field2 = val2' --form '[email protected]; type = ứng dụng/zip 'https://www.some.domain/
Tôi thấy rằng các cặp trường/giá trị biểu mẫu được đặt làm tiêu đề HTTP.
Nội dung-Bố trí: biểu mẫu-dữ liệu; name = field1 ... value1
Bất kỳ ý tưởng nào về những gì tôi đang làm sai ở đây? Bất kỳ trợ giúp được đánh giá cao.
Không biết tại sao bạn không nhận được bất kỳ phiếu bầu nào - đây là giải pháp cho multipart trên Android! Các công cụ khác mà tôi tìm thấy đã làm tất cả theo cách thủ công và khá cồng kềnh .... – Lonzak
Nhưng đây không phải là đa phần/hỗn hợp. Dường như có hàng trăm câu trả lời làm thế nào để làm điều đó với multipart/form-data. – unwichtich