开发者

JavaFX: File upload to REST service / servlet fails because of missing boundary

I'm trying to upload a file using JavaFX using the HttpRequest. For this purpose I have written the following function.

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

On the server side, I am trying to handle the incoming data using the Apache Commons FileUpload API using a Jersey REST service. The code used to do this is a simple copy of the FileUpload tutorial on the Apache homepage.

@Path("Upload")
public class UploadService {

  public static final String RC_OK = "OK";
  public static final String RC_ERROR = "ERRO开发者_开发知识库R";

  @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;
    }
    ...
  }
}   

However, I get a exception at items = upload.parseRequest(request);: org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found

I guess I have to add a manual boundary info to the InputStream. Is there any easy solution to do this? Or are there even other solutions?


Have you tried just using the InputStream from HttpServletRequest like so

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜