2015-01-27 22 views
11

Diğer verilerle birlikte bir çoklu-dosya içeren bir json yükünü kabul edebilecek bir post bitiş noktasına sahip olup olmadığının bilinmesini isterim. Örneğin. Ayrı ancak ilgili soru bir dosya, https://spring.io/guides/gs/uploading-files/ yüklemek için springboot doc örnekte, dosya istek yolundaki ziyade yük parçası olmasıdırYay önyükleme Çok parçalı bir dosya yükleme json gövdesi

public class Bio { 
    private Long id; 
    private String firstName; 
    private MultipartFile imageFile; 
} 

: gibi bedenim nesne görünürdü. Bu bana garip geliyor, bu yüzden dosya istek gövdesine bağlanmanın bir yolu var mı?

cevap

11

Bunu daha önce yaptığım gibi, biri dosya için ve diğeri de JSON için olmak üzere iki ayrı parça yüklemektir. Sizin denetleyici yöntemi şöyle görünecektir:

Content-Type: multipart/mixed; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
Content-Disposition: form-data; name="foo" 
Content-Type: application/json;charset=UTF-8 
{"a":"alpha","b":"bravo"} 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
Content-Disposition: form-data; name="image"; filename="foo.png" 
Content-Type: application/octet-stream 
Content-Length: 734003 
<binary data> 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm-- 
+0

Güzel. Bu cevap için teşekkürler –

5

Andy'nin çözüm @RequestPart mükemmel çalıştı kullanmak:

public void create(@RequestPart("foo") Foo foo, 
     @RequestPart("image") MultipartFile image) 
    // … 
} 

Daha sonra şuna benzer istekleri tüketmek olacaktır. Ancak, destekleyici görünmediği için postacı ile doğrulayamamak, her bir multipartın içerik türünü belirleyerek, sınırlarını kendi yanıtında belirtildiği gibi düzgün bir şekilde belirlemek.

Hem bir yük yükünü hem de bir dosyayı curl komutunu kullanarak eklemek için, bunun gibi bir şey yapacaktır.

curl -i -X POST -H "Content-Type: multipart/mixed" \ 
-F "somepayload={\"name\":\"mypayloadname\"};type=application/json" \ 
-F "[email protected]" http://localhost:8080/url 

Eğer yük içeriğini kaçmak ve somevalid.zip bukle yürütüldüğünde aynı dizinde olması veya dosyaya geçerli yolu ile değiştirmek gerekir emin olun.

+2

Hem postacı hem de curl için: '{" timestamp ": 1471958647719," status ":" ERROR "," data ":" İçerik türü "application/octet-stream" desteklenmiyor "}' – Derp

İlgili konular