Как я могу запустить поток, который будет работать в фоновом режиме, но ответ будет немедленно отправлен пользователю?
Я пытаюсь загрузить файл с устройства Android. Хотя процесс загрузки работает нормально, я хотел бы сообщить пользователю, что процесс завершен, как только файл был загружен с его конца.
Я проверил, что вызов ServletFileUpload.parseRequest() занимает много времени.
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
List items = uploadHandler.parseRequest(request);
Итак, в основном я ищу способ, с помощью которого я могу сказать пользователю: «Эй, ты сделал свою часть работы», теперь очередь сервлета выполнять всю обработку.
но я не могу, потому что блокируется parseRequest.
Я ошибаюсь в том, что он блокируется, потому что именно тогда он фактически отправляется устройством?
Загрузка на Android:
while (bytesRead > 0)
{
task.myPublishProgress(totalBytesRead, fileSize);
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
totalBytesRead+= bytesRead;
}
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
fileInputStream.close();
dos.flush();
Log.i(TAG ,"Database file with name " + this.fileName + " has been successfully written");
InputStream is = conn.getInputStream();
// retrieve the response from server
int ch;
StringBuilder b = new StringBuilder();
while( ( ch = is.read() ) != -1 ){
b.append( (char)ch );
}
dos.close();
обработка на сервере:
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory ();
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
/*
* Parse the request
*/
System.out.println("parsing the request....");
**List items = uploadHandler.parseRequest(request);**
FileItem item = (FileItem) items.get(0);
fileName = item.getName();
File file = new File(destinationDir, fileName);
item.write(file);
Я бы хотел, чтобы сервлет не слишком блокировал parseRequest, а, возможно, обрабатывал это в потоке и отправлял ответ клиенту.
Благодарность