2010-04-21 2 views
1

Я пытаюсь загрузить файл с использованием JavaFX с помощью HttpRequest. Для этой цели я написал следующую функцию.JavaFX: загрузка файла в службу REST/сервлет сбой из-за недостающей границы

function uploadFile(inputFile : File) : Void { 
    // check file 
    if (inputFile == null or not(inputFile.exists()) or inputFile.isDirectory()) { 
     return; 
    }  
    def httpRequest : HttpRequest = HttpRequest { 
     location: urlConverter.encodeURL("{serverUrl}"); 
     source: new FileInputStream(inputFile) 
     method: HttpRequest.POST 
     headers: [ 
      HttpHeader { 
       name: HttpHeader.CONTENT_TYPE 
       value: "multipart/form-data" 
      } 
     ] 
    } 
    httpRequest.start(); 
} 

На стороне сервера, я пытаюсь обрабатывать входящие данные с помощью API Apache Commons FileUpload с помощью службы Джерси REST. Код, используемый для этого, представляет собой простую копию учебника FileUpload на домашней странице Apache.

@Path("Upload") 
public class UploadService { 

    public static final String RC_OK = "OK"; 
    public static final String RC_ERROR = "ERROR"; 

    @POST 
    @Produces("text/plain") 
    public String handleFileUpload(@Context HttpServletRequest request) { 
    if (!ServletFileUpload.isMultipartContent(request)) { 
     return RC_ERROR; 
    } 
    FileItemFactory factory = new DiskFileItemFactory(); 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    List<FileItem> items = null; 
    try { 
     items = upload.parseRequest(request); 
    } 
    catch (FileUploadException e) { 
     e.printStackTrace(); 
     return RC_ERROR; 
    } 
    ... 
    } 
} 

Однако я получаю исключение в items = upload.parseRequest(request);: org.apache.commons.fileupload.FileUploadException: запрос был отклонен, поскольку не многочастная границы не была найдена

Я предполагаю, что я должен добавить вручную границу info к InputStream. Есть ли простое решение для этого? Или есть даже другие решения?

ответ

3

Вы пробовали только с помощью InputStream из HttpServletRequest как так

InputStream is = httpRequest.getInputStream(); 
BufferedInputStream in = new BufferedInputStream(is); 
//Write out bytes 

out.close(); 
is.close(); 
+0

Это работает. Однако он имеет некоторые ограничения. Например. вы должны передать имя файла в качестве параметра запроса. – spa