Koush Ion Library - 使用Progressbar上传Multipart / form-data,TimeoutException

时间:2014-09-17 05:33:44

标签: android file-upload multipartform-data timeoutexception ion

我要像这样使用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)

1 个答案:

答案 0 :(得分:0)

这里讨论类似的问题:

  

Uploading multipart file with Koush Ion library

它表示要在加载URL的参数中包含“POST”:

ion.load("POST",url)