2

我想知道为什么我可以成功地将文件上传到服务器,AsyncHttpClient但使用SyncHttpClient.

以下设置产生成功的结果:

  1. MultipartEntityBuilder构建我的分段上传请求 +AsyncHttpClient发布它。通过点击活动中的按钮触发发布请求。

但是,因为我想在一个中上传,所以IntentService我使用SyncHttpClient了,下面的设置并没有成功上传文件。

  1. MultipartEntityBuilder+ SyncHttpClient+ IntentService

下面是我如何构建和发送我的请求,这在设置 1 和 2 中是相同的。该upload方法放置在辅助类中。并在单例实例上调用,该实例在构造时mContext也被设置。client是辅助类的静态实例变量;clientAsyncHttpClient设置 1 中的 aSyncHttpClient和设置 2 中的 a。

// MyUploadHelper.java

public void upload(File f) {
    String fileName = file.getName();

    MultipartEntityBuilder builder = MultipartEntityBuilder.create();
    builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
    builder.addTextBody("api", "SYNO.FileStation.Upload");
    // some more addTextBody omitted
    builder.addBinaryBody("filename", file, ContentType.APPLICATION_OCTET_STREAM, fileName);

    HttpEntity entity = builder.build();

    client.post(mContext, getAbsoluteUrl(),
                entity, "multipart/form-data",
                new JsonHttpResponseHandler() {
                    @Override
                    public void onSuccess(int statusCode, Header[] headers, JSONObject response) {
                        // This part can be reached in both settings. But in setting 2, the server returns "Unknown error of file operation".
                    }
                });
}

该方法是这样调用的:

MyUploadHelper.getInstance(this).upload(aFile);

其中thisActivity设置 1 中的一个和IntentService设置 2 中的一个。

最后,提前祝大家新年快乐!

4

0 回答 0