在java中异步上传文件的HTTP请求最简单的方法是什么?

时间:2013-02-14 00:30:08

标签: java http file-upload asynchronous

在.Net中,如果我想异步上传文件,我只需要调用System.Net.WebClient类的UploadFileAsync()实例方法,阻塞主线程,直到它收到来自我传递到的waithandle的信号。 UploadFileAsync()方法,然后在上传文件后调用的事件处理程序过程中,使用相同的waithandle发出主线程信号。以这种方式上传文件的好处是,它还可以订阅每次文件上传进度发生变化时调用的事件处理程序。

在Java中,是否有使用java.net.URLConnection类(或类似的东西)实现类似功能的直接方法?

2 个答案:

答案 0 :(得分:1)

是的,使用ExecutorService并提交Callable对象,然后等到future.get()返回结果。例如:

ExecutorService executor = Executors.newSingleThreadExecutor();
Future<Foo> future = executor.submit(new Callable<Foo>()
{
    @Override
    public Foo call() throws Exception
    {
        // ...

        return someFoo;
    }
});

Foo result = future.get(); // result is the same as someFoo, both should refer to the same object

再次注意future.get()阻塞,直到后台线程完成执行call()

答案 1 :(得分:0)

优秀的Apache Http Client似乎有an async version。我自己没有用过,但看起来很有希望。

Jersey client还内置了可满足您需求的异步请求支持。它有一个test class来证明它的用途。

Jersey客户端至少提供了请求完成的回调,但我不确定文件上传的进度回调。