EzyHTTP Upload File
Same as every HTTP server framewords, EzyHttp allows you upload file, too. And we recommend you let's use asynchronous API, to know why, please take a look the explanation here.
1. FileUploader
EzyHTTP provides to you an convenient FileUploader class. It wraps ResourceUploadManager, an event loop like below:

And the event loop will do like this:
loop: take a inputstream/outputstream pair from the queue: take 1024 bytes from the inputstream of the requested file and push to client's outputstream if there is no remain data in the inputstream then response to the client: call to the callback and done else push the the inputstream/outputstream pair back to the queue
2. Enable file upload configuration
To enable file upload, you can add the configuration to your application.properties file like this:
resources.upload.enable=true
If you want to set queue capacity and thread pool size, buffer size, you can setup:
resources.upload.capacity=[an integer value] resources.upload.thread_pool_size=[an integer value] resources.upload.buffer_size=[an integer value]
3. Upload file asynchronously
To upload a file asynchronously with FilerUploader, you can do like this:
@Controller("/api/v1")
@AllArgsConstructor
public class FileController {
private final FileUploadService fileUploadService;
@Async
@DoPost("/files/upload")
public void uploadPost(
RequestArguments requestArguments
) throws Exception {
fileUploadService.accept(requestArguments.getRequest());
}
}
@EzySingleton
@AllArgsConstructor
public class FileUploadService {
private final FileUploader fileUploader;
public void accept(HttpServletRequest request) throws Exception {
accept(
request,
request.getPart("file"),
() -> System.out.println("Upload finished")
);
}
public void accept(
HttpServletRequest request,
Part part,
EzyExceptionVoid callback
) {
String fileName = part.getSubmittedFileName();
File file = new File("files/" + fileName);
AsyncContext asyncContext = request.getAsyncContext();
fileUploader.accept(asyncContext, part, file, callback);
}
}
4. Upload file Synchronously
To upload a file synchronously, you can do like this:
@Controller("/api/v1")
public class FileController {
@DoPost("/files/upload-sync")
public ResponseEntity uploadSyncPost(
HttpServletRequest request
) throws Exception {
Part part = request.getPart("file");
String fileName = part.getSubmittedFileName();
File file = new File("files/" + fileName);
InputStream inputStream = part.getInputStream();
byte[] buffer = new byte[1024];
try (OutputStream outputStream = new FileOutputStream(file)) {
while (true) {
int read = inputStream.read(buffer);
if (read > 0) {
outputStream.write(buffer, 0, read);
} else {
break;
}
}
}
return ResponseEntity.noContent();
}
}
Next step
You can see How to download a file