Я пытаюсь реализовать возобновляемую загрузку (используя протокол TUS https://tus.io/) в нашем Restlet API.
Я получил протокол для работы по большей части, но затем я столкнулся с проблемой способа, которым Restlet, кажется, обрабатывает загрузку файлов - он, кажется, ждет завершения загрузки всего файла, прежде чем передать ресурс, который должен обработать звонок.
Это не работает с тем, как TUS предназначен для работы, когда загруженные данные должны быть переданы / записаны в целевой файл во время его загрузки. Если клиент приостанавливает или прерывает загрузку в середине, все загруженные данные должны быть записаны в файл, и полученное смещение позволяет клиенту возобновить загрузку с этой позиции в более позднее время.
Код контроллера (ресурса Restlet), который обрабатывает вызовы PATCH, действительно прост:
@Patch
public void tusPatch(final Representation data) {
tusService.process(getRequest(), getResponse(), userId);
// Add some TUS specific headers and we're done.
}
Таким образом, проблема в том, что всякий раз, когда я загружаю файл, Restlet (или, может быть, базовый сервер Jetty?) Сначала будет ждать, пока клиент завершит ВСЮ загрузку, прежде чем передать результирующее представление в класс контроллера и мой метод PATCH.
По сути, мне нужен некий InputStream загруженного файла, из которого я могу читать, пока файл загружается.
Я не уверен на 100%, поддерживает ли Restlet то, что я пытаюсь сделать здесь, или я просто использую это неправильно, или это Jetty, который буферизует что-то, чего не должно быть.