1

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

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

4

2 回答 2

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

于 2013-02-14T00:32:30.990 回答
0

似乎有一个优秀的 Apache Http Client 的异步版本。我自己没用过,但看起来很有希望。

Jersey 客户端还内置了异步请求支持,可以满足您的需求。有一个测试类来演示它的使用。

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

于 2013-02-14T00:39:27.637 回答