2010-04-21 67 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