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