2010-04-21 62 views
1

我試圖使用HttpRequest使用JavaFX上傳文件。爲此我寫了下面的函數。JavaFX:由於缺少邊界文件上傳到REST服務/ servlet失敗

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(); 
} 

在服務器端,我試圖使用Jersey REST服務使用Apache Commons FileUpload API處理傳入數據。用於執行此操作的代碼是Apache主頁上的FileUpload教程的簡單副本。

@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:請求被拒絕,因爲沒有多邊界發現

我想我必須添加手動邊界信息到InputStream。有沒有簡單的解決方案來做到這一點?或者還有其他解決方案嗎?

回答

3

你有沒有嘗試過使用InputStreamHttpServletRequest像這樣

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

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

這工作。但它有一些限制。例如。您必須將文件名稱作爲查詢參數傳遞。 – spa 2010-04-22 11:47:44

相關問題