4

我将像这样使用 Ion 将文件上传到 rest 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)
4

1 回答 1

0

这里讨论了一个类似的问题:

使用 Koush 离子库上传多部分文件

它说在加载 URL 的参数中包含“POST”:

ion.load("POST",url)
于 2016-05-12T18:02:51.280 回答