我想知道为什么我可以使用AsyncHttpClient
成功将文件上传到服务器,但在使用SyncHttpClient
时则不能。
以下设置产生成功结果:
MultipartEntityBuilder
构建我的分段上传请求+ AsyncHttpClient
以发布它。点击活动中的按钮即可触发发布请求。但是,因为我想在IntentService
上传,我使用SyncHttpClient
,并且以下设置无法成功上传文件。
MultipartEntityBuilder
+ SyncHttpClient
+ IntentService
。下面是我如何构建和发送我的请求,这在设置1和2中是相同的。upload
方法放在一个帮助器类中。并且在单个实例上调用,在构造时它的mContext
也被设置。 client
是辅助类的静态实例变量; client
在设置1中为AsyncHttpClient
,在设置2中为SyncHttpClient
。
// 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);
其中this
在设置1中为Activity
,在设置2中为IntentService
。
最后,提前新年快乐!