Problema con el envío de 2 matriz bidimensional de archivos

Youssef:

Voy a enviar varios archivos con formDatacomo esto

estructura de datos forma

En mi controlador MVC primavera

@PostMapping(value = "/marches")
public Integer saveMarches(
        @RequestPart("formJson") FooBean formJson, 
        @RequestPart("attachOs") MultipartFile[][] attachOs
        ) throws IOException {
    ...
}

Mi conf:

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
    multipartResolver.setMaxUploadSize(30000000);
    return multipartResolver;
}

Pero tengo una 400 Bad Requesten el navegador

introducir descripción de la imagen aquí

Y en el IDE que tengo:

Resolved [org.springframework.web.multipart.support.MissingServletRequestPartException:
Required request part 'attachOs' is not present]

y si trato @RequestPart("attachOs[][]") MultipartFile[][] attachOsque me dieron siempre una mala solicitud conRequired request part 'attachOs[][]' is not present

El problema es obvio : la primavera está buscando sólo para attachOsuna parte ( @RequestPart("attachOs")) pero estoy enviando attachOs[0][0], attachOs[0][1]...

Cuando envío sólo la formJsonparte sin archivos o si envío un solo archivo @RequestPart("attachOs") MultipartFile attachOso una matriz de dimensión archivos @RequestPart("attachOs") MultipartFile[] attachOstodo funciona bien.

código Javascript:

const formData = new FormData();

for (const [i, os] of formJson.os.entries()) {
    if(os.attachment) {
        for (const [j, file] of [...os.attachment].entries()) {
            formData.append(`attachOs[${i}][${j}]`, file );
        }
    }
}
...
formData.append('formJson', 
           new Blob([JSON.stringify(formJson)], {type:'application/json'}));
...
axios({
    url: ...,
    method: 'POST',
    data: formData,
})
...

Mi formJsonestructura es

{
    // form fields
    ...
    os: [
        {
            // os form fields
            ...
            attachment: [{ /* File type */ }, ...], // multiple files per os
        },
        ...
    ]
}

Yo sé que los archivos no pueden ser enviados junto con JSON Es por eso que estoy construyendo el FormData arriba y después de eso voy a eliminar la propiedad de fijación de la estructura JSON

Así que mis preguntas:

1. ¿Cómo se soluciona el problema de la petición malo?

2. ¿Hay otro patrón de enfoque o el diseño para manejar este caso de uso?

buræquete:

He encontrado una solución mediante la utilización de una @ModelAttribute(de aquí );

En primer lugar crear una clase del modelo similares;

public class MyRequest {
    private FooBean formJson;
    private MultipartFile[][] attachOs = new MultipartFile[2][2];

    // getters/setters
}

A continuación, agregarlo a su controlador similares;

@PostMapping(value = "/marches", consumes = "multipart/form-data")
public Integer saveMarches(@ModelAttribute MyRequest request) throws IOException {
    // some code
}

La parte importante es la inicialización de la MultipartFile[][] attachOs, de lo contrario no funciona con matrices multidimensionales debido a algún problema de inicialización interna.


O puede utilizar el siguiente tipo en la clase del modelo;

private List<MultipartFile>[] attachOs;

que funciona sin una inicialización.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=311612&siteId=1
Recomendado
Clasificación