dropwizard

dropwizard metrics



Subir archivo Dropwizard (3)

Asegúrese de agregar la dependencia de formularios de dropwizard a su pom.xml

<dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-forms</artifactId> <version>${dropwizard.version}</version> <type>pom</type> </dependency>

Su recurso parece bueno. De todos modos, he cargado un proyecto de ejemplo para cargar archivos con Dropwizard - https://github.com/juanpabloprado/dw-multipart

@POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws MessagingException, IOException { String uploadedFileLocation = "C:/Users/Juan/Pictures/uploads/" + fileDetail.getFileName(); // save it writeToFile(uploadedInputStream, uploadedFileLocation); String output = "File uploaded to : " + uploadedFileLocation; return Response.ok(output).build(); } // save uploaded file to new location private void writeToFile(InputStream uploadedInputStream, String uploadedFileLocation) throws IOException { int read; final int BUFFER_LENGTH = 1024; final byte[] buffer = new byte[BUFFER_LENGTH]; OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); while ((read = uploadedInputStream.read(buffer)) != -1) { out.write(buffer, 0, read); } out.flush(); out.close(); }

Tengo que cargar un archivo desde mi sitio, pero cnt parece que funciona con el asistente para soltar.

Aquí está el formulario de mi sitio.

<form enctype="multipart/form-data" method="POST" action="UploadFile"> <input type="file" id="fileUpload" name="file"/> <input type="hidden" id="fileName" name="fileName"/> <input type="submit" value="Upload"/> </form>

¿Cómo iría en el backend para recibir el archivo?

La solucion fue

@POST @Consumes(MediaType.MULTIPART_FORM_DATA) public Response uploadFile( @FormDataParam("file") final InputStream fileInputStream, @FormDataParam("file") final FormDataContentDisposition contentDispositionHeader) { String filePath = uploadLocation + newFileName; saveFile(fileInputStream, filePath); String output = "File can be downloaded from the following location : " + filePath; return Response.status(200).entity(output).build(); } private void saveFile(InputStream uploadedInputStream, String serverLocation) { try { OutputStream outputStream = new FileOutputStream(new File(serverLocation)); int read = 0; byte[] bytes = new byte[1024]; outputStream = new FileOutputStream(new File(serverLocation)); while ((read = uploadedInputStream.read(bytes)) != -1) { outputStream.write(bytes, 0, read); } outputStream.flush(); outputStream.close(); } catch (IOException e) { e.printStackTrace(); } }


Con Dropwizard 0.9.2 tienes que agregar la dependencia:

<dependency> <groupId>io.dropwizard</groupId> <artifactId>dropwizard-forms</artifactId> <version>${dropwizard.version}</version> <type>pom</type> </dependency>

así como registrar la función multiparte:

environment.jersey().register(MultiPartFeature.class);


Puede hacer el guardado en el servidor en un menor número de líneas usando nio

java.nio.file.Path outputPath = FileSystems.getDefault().getPath(<upload-folder-on-server>, fileName); Files.copy(fileInputStream, outputPath);

Además, si está utilizando 0.7.0-rc2, necesitará esta dependencia en su pom.xml

<dependency> <groupId>com.sun.jersey.contribs</groupId> <artifactId>jersey-multipart</artifactId> <version>1.18</version> </dependency>