我要像这样使用Ion将文件上传到休息API(基于Koush提供的示例代码)
if (Upload != null && !Upload.isDone() && !Upload.isCancelled()){
resetUploadReq();
return;
}
String UploadUrl = Constants.Video_Upload_URL+userToken;
Upload = Ion.with(UploadActivity.this).load(UploadUrl)
.uploadProgressHandler(new ProgressCallback() {
@Override
public void onProgress(long uploaded, long total) {
int mProgress = (int) (100*uploaded / total);
mUploadBtn.setProgress(mProgress);
}
})
.setTimeout( 15 * 1000)
.setMultipartFile("file", new File(Path))
.asJsonObject()
.setCallback(new FutureCallback<JsonObject>() {
@Override
public void onCompleted(Exception ex, JsonObject result) {
resetUploadReq();
if (ex == null){
JsonObject ReturnJson = result.getAsJsonObject();
Status = ReturnJson.get("status").getAsBoolean();
if (Status == true){
VIDEO = ReturnJson.get("video").getAsString();
// ConvertingCheck(VIDEO);
}else{
mUploadBtn.setProgress(0);
Crouton.makeText(UploadActivity.this, "An Error occurred, Try again later", Style.ALERT).show();
}
}else{
mUploadBtn.setProgress(0);
Crouton.makeText(UploadActivity.this, "An Error occurred, Try again later", Style.ALERT).show();
ex.printStackTrace();
return;
}
}
});
上传过程似乎完成正确,意味着我可以从uploadProgressHandler上传百分比,并且使用该信息我的进度条结束。当我到达进度结束时它意味着文件已上传!但它似乎不正确,因为我收到了这个错误:
java.util.concurrent.TimeoutException
com.koushikdutta.async.http.AsyncHttpClient$2.run(AsyncHttpClient.java:240)
com.koushikdutta.async.AsyncServer.lockAndRunQueue(AsyncServer.java:686)
com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:703)
com.koushikdutta.async.AsyncServer.run(AsyncServer.java:609)
com.koushikdutta.async.AsyncServer.access$4(AsyncServer.java:598)
com.koushikdutta.async.AsyncServer$13.run(AsyncServer.java:556)
经过几次(从40秒到2,3分钟取决于文件大小)我从API获得响应,代表上传的视频!
API JsonObject响应:{"status": true, "message": "upload successfully", "video": "PJ0O1"}
我的错在哪里?
VERBOSE日志(0-100之间的数字是上传百分比):
09-17 00:24:56.239: D/PARSVID(30058): (0 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: preparing request
09-17 00:24:56.239: I/PARSVID(30058): (0 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: Using loader: com.koushikdutta.ion.loader.HttpLoader@434bbdf0
09-17 00:24:56.244: D/PARSVID(30058): (0 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: Executing request.
09-17 00:24:56.244: D/PARSVID(30058): (1 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: Reusing keep-alive socket
09-17 00:24:56.244: V/PARSVID(30058): (1 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: socket connected
09-17 00:24:56.249: V/PARSVID(30058): (5 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862:
09-17 00:24:56.249: V/PARSVID(30058): POST /api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862 HTTP/1.1
09-17 00:24:56.249: V/PARSVID(30058): Host: parsvid.com
09-17 00:24:56.249: V/PARSVID(30058): User-Agent: Dalvik/1.6.0 (Linux; U; Android 4.4.2; SM-G900H Build/KOT49H)
09-17 00:24:56.249: V/PARSVID(30058): Accept-Encoding: gzip, deflate
09-17 00:24:56.249: V/PARSVID(30058): Connection: keep-alive
09-17 00:24:56.249: V/PARSVID(30058): Accept: */*
09-17 00:24:56.249: V/PARSVID(30058): Cookie: csrftoken=Ljk6MvEvaYGy6aEaAw4LzvCffknajnvE; sessionid=69fmhs7r8x1y2bcbs8pvf5vbr4faymjx
09-17 00:24:56.249: V/PARSVID(30058): Content-Type: multipart/form-data; boundary=----------------------------7a7817fbefd0490382024db9fa0abe3f
09-17 00:24:56.249: V/PARSVID(30058): Content-Length: 2297298
09-17 00:24:56.249: V/PARSVID(30058):
09-17 00:24:56.249: I/System.out(30058): 0
09-17 00:24:56.269: I/System.out(30058): 0
09-17 00:24:56.269: I/System.out(30058): 1
09-17 00:24:56.274: I/System.out(30058): 2
09-17 00:24:56.274: I/System.out(30058): 5
09-17 00:24:56.274: I/System.out(30058): 11
09-17 00:24:56.274: I/System.out(30058): 22
09-17 00:24:56.274: I/System.out(30058): 27
09-17 00:25:35.029: I/System.out(30058): 33
09-17 00:25:35.044: I/System.out(30058): 36
09-17 00:25:50.794: I/System.out(30058): 45
09-17 00:25:50.819: I/System.out(30058): 46
09-17 00:26:07.094: I/System.out(30058): 55
09-17 00:26:23.379: I/System.out(30058): 56
09-17 00:26:23.414: I/System.out(30058): 65
09-17 00:26:39.419: I/System.out(30058): 68
09-17 00:26:39.424: I/System.out(30058): 74
09-17 00:26:54.209: I/System.out(30058): 79
09-17 00:26:54.239: I/System.out(30058): 84
09-17 00:27:08.369: I/System.out(30058): 90
09-17 00:27:08.394: I/System.out(30058): 93
09-17 00:27:22.194: I/System.out(30058): 99
09-17 00:27:22.199: V/PARSVID(30058): (145955 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: request completed
09-17 00:27:22.199: I/System.out(30058): 99
09-17 00:27:22.204: I/System.out(30058): 100
09-17 00:27:37.219: E/PARSVID(30058): (160976 ms) http://parsvid.com/api/v1/upload/?token=a0d2741da0e- - - - - - - - - - - - - -ce37c5bb2d862: Connection error
09-17 00:27:37.229: E/PARSVID(30058): null
09-17 00:27:37.229: E/PARSVID(30058): java.util.concurrent.TimeoutException
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.http.AsyncHttpClient$2.run(AsyncHttpClient.java:240)
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.AsyncServer.lockAndRunQueue(AsyncServer.java:686)
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.AsyncServer.runLoop(AsyncServer.java:703)
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.AsyncServer.run(AsyncServer.java:609)
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.AsyncServer.access$4(AsyncServer.java:598)
09-17 00:27:37.229: E/PARSVID(30058): at com.koushikdutta.async.AsyncServer$13.run(AsyncServer.java:556)
答案 0 :(得分:0)
这里讨论类似的问题:
它表示要在加载URL的参数中包含“POST”:
ion.load("POST",url)