uploadedFile

Description

Streams the contents of a file uploaded as a multipart form into a temporary file on disk and provides the file and metadata about the upload as extracted value.

If there is an error writing to disk the request will be failed with the thrown exception, if there is no field with the given name the request will be rejected, if there are multiple file parts with the same name, the first one will be used and the subsequent ones ignored.

Note

This directive will stream contents of the request into a file, however one can not start processing these until the file has been written completely. For streaming APIs it is preferred to use the fileUpload directive, as it allows for streaming handling of the incoming data bytes.

Example

    // function (FileInfo, File) => Route to process the file metadata and file itself
    BiFunction<FileInfo, File, Route> infoFileRoute =
      (info, file) -> {
        // do something with the file and file metadata ...
        file.delete();
        return complete(StatusCodes.OK);
      };


    final Route route = uploadedFile("csv", infoFileRoute);

    Map<String, String> filenameMapping = new HashMap<>();
    filenameMapping.put("filename", "data.csv");

    akka.http.javadsl.model.Multipart.FormData multipartForm =
      Multiparts.createStrictFormDataFromParts(Multiparts.createFormDataBodyPartStrict("csv",
        HttpEntities.create(ContentTypes.TEXT_PLAIN_UTF8,
          "1,5,7\n11,13,17"), filenameMapping));

    // test:
    testRoute(route).run(HttpRequest.POST("/")
      .withEntity(
        multipartForm.toEntity(BodyPartRenderer
		  .randomBoundaryWithDefaults())))
      .assertStatusCode(StatusCodes.OK);
The source code for this page can be found here.