Necesito ayuda con la carga de varios archivos utilizando Jersey. He utilizado el siguiente código para cargar un archivo único con Jersey.

package my.first.rest;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;



import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;

@Path("uploadfile")
public class Upload {
String location;



    @POST
    @Path("/upload")
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public  String uploadfile(@FormDataParam("file") InputStream is, @FormDataParam("file") FormDataContentDisposition filedetail){



        saveToDisk(is,filedetail);
        return  "File Uploaded Succesfully_"+location;

    }


    private void saveToDisk(InputStream is1,
            FormDataContentDisposition filedetail) {
        //TODO Auto-generated method stub

         location = "E://upload/"+filedetail.getFileName();
        try{
            OutputStream out = new FileOutputStream(new File(location));
            int read = 0;
            byte[] bytes = new byte[1024];
            out = new FileOutputStream (new File(location));
            while((read = is1.read(bytes)) != -1){
                out.write(bytes,0,read);
            }
            out.flush();

            out.close();
        }catch (IOException e){
            e.printStackTrace();
        }
    }


}

El código anterior funciona bien con la carga de un solo archivo, pero cuando agrego el multiple=»multiple» atributo para el tipo de entrada = archivo de la etiqueta, soy capaz de seleccionar varios elementos en una sola carga, se carga el primer elemento seleccionado y el nombre del último elemento seleccionado. No estoy esperando el código de trabajo causa que no estaba destinado para manejar la carga de varios archivos pero tiene que haber una manera alrededor de ella, a la derecha?? Desde entonces, se toma un archivo y el nombre de la otra.

He mirado varios stackoverflow hilos y busqué en google un montón. No me han publicado este si que me había encontrado la respuesta. No estoy buscando para cargar varios archivos usando los tipos de código de abajo:

<input type ="file" name="file">
<input type ="file" name="file">
<input type ="file" name="file2">

No quiero cargar varios archivos de forma individual. Quiero ser capaz de seleccionar varios archivos a la vez y todas ellas para ser cargado en algún lugar. Mi tag es como este:

<input type ="file" name="file" multiple="multiple">

Aquí está todo el código HTML.

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<form action ="http://localhost:8080/fuseframework/uploadfile/upload" method="post" enctype="multipart/form-data">
file: 
<br>
<input type ="file" name="file" multiple="multiple">

<input type="submit" value="send">
</form>
</body>
</html>

Estos son los frascos que yo he utilizado
http://i.stack.imgur.com/1tVT8.png

2 Comentarios

  1. 7

    De que funciona bien para mí hacer uso de la ‘FormDataMultiPart’.

    Aquí está el código de Java, el FormDataContentDisposition objeto(formParams) contiene el archivo real de contenido.

    List<FormDataBodyPart> parts = formParams.getFields("file");
    for (FormDataBodyPart part : parts) {
        FormDataContentDisposition file = part.getFormDataContentDisposition();
    }

    En el JS lado, yo uso el objeto FormData y empuje varios archivos con el mismo nombre:

    for (var i = 0; i < files.length; i++)
        fd.append('file', files[i]);

    Deseo es ayudar a

    • Para obtener el contenido del archivo uso: InputStream is = parte del cuerpo.getEntityAs(InputStream.class);
    • cuando intento pasar inputStream argumento de como puedo obtener una runtimeexception, dice que «DataHead$ReadMultiStream» no es serializable. alguna idea?
  2. 6

    Esta cosa funcionó para mí bastante bien:

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    public void uploadMultiple(@FormDataParam("file") FormDataBodyPart body){
        for(BodyPart part : body.getParent().getBodyParts()){
            InputStream is = part.getEntityAs(InputStream.class);
            ContentDisposition meta = part.getContentDisposition();
            doUpload(is, meta);
        }
    }

Dejar respuesta

Please enter your comment!
Please enter your name here