java - mvc - Spring boot Carga de archivo multiparte como parte del cuerpo json
spring receive multipart file (2)
La solución de Andy para usar @RequestPart funcionó a la perfección. Pero no puede validar con el cartero, ya que no parece ser compatible, especificando el tipo de contenido de cada multiparte para establecer los límites correctamente como se describe en su respuesta.
Entonces, para adjuntar tanto una carga como un archivo usando el comando curl, algo como esto servirá.
curl -i -X POST -H "Content-Type: multipart/mixed" /
-F "somepayload={/"name/":/"mypayloadname/"};type=application/json" /
-F "[email protected]" http://localhost:8080/url
Asegúrese de escapar del contenido de la carga y somevalid.zip debe estar allí en el mismo directorio donde se ejecuta curl o reemplazarlo con una ruta válida al archivo.
Me gustaría saber si es posible tener un punto final posterior que pueda aceptar una carga útil json que contenga un archivo multiparte así como otros datos. por ejemplo, mi objeto corporal se vería así:
public class Bio {
private Long id;
private String firstName;
private MultipartFile imageFile;
}
Una pregunta separada pero relacionada es que en el ejemplo de doc de Springboot para cargar un archivo, https://spring.io/guides/gs/uploading-files/ , el archivo es parte de la ruta de solicitud en lugar de la carga útil. Esto me parece extraño, así que, ¿hay alguna forma de vincular el archivo al cuerpo de la solicitud?
La forma en que hice esto en el pasado es subir dos partes separadas, una para el archivo y otra para el JSON que la acompaña. Su método de controlador sería algo como esto:
public void create(@RequestPart("foo") Foo foo,
@RequestPart("image") MultipartFile image)
// …
}
A continuación, consumiría solicitudes que se ven así:
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--