首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phonegap文件传输超时

Phonegap文件传输超时
EN

Stack Overflow用户
提问于 2013-02-05 21:15:22
回答 4查看 4.5K关注 0票数 2

有没有办法在phonegap中定义下载文件传输的超时时间。在android设备上,如果我尝试下载一个无响应的URL,8分钟后会得到以下信息:

代码语言:javascript
复制
02-05 11:50:38.234 W/FileTransfer(12658): Error getting HTTP status code from connection.
02-05 11:50:38.234 W/FileTransfer(12658): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.io.InputStream.read(InputStream.java:163)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.Streams.readAsciiLine(Streams.java:201)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
02-05 11:50:38.234 W/FileTransfer(12658):   at org.apache.cordova.FileTransfer.download(FileTransfer.java:495)
02-05 11:50:38.234 W/FileTransfer(12658):   at org.apache.cordova.FileTransfer.execute(FileTransfer.java:88)
02-05 11:50:38.234 W/FileTransfer(12658):   at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:231)
02-05 11:50:38.234 W/FileTransfer(12658):   at java.lang.Thread.run(Thread.java:856)
02-05 11:50:38.234 W/FileTransfer(12658): Caused by: libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.Posix.recvfromBytes(Native Method)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.Posix.recvfrom(Posix.java:131)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
02-05 11:50:38.234 W/FileTransfer(12658):   at libcore.io.IoBridge.recvfrom(IoBridge.java:513)
02-05 11:50:38.234 W/FileTransfer(12658):   ... 15 more
02-05 11:50:38.234 E/FileTransfer(12658): {"target":"\/storage\/sdcard0\/Android\/data\/uk.ac.edina.mobile\/cache\/edina\/cache\/open_3_21_37.jpg","source":"http:\/\/fieldtripgb.edina.ac.uk\/mapcache\/tms1.0.0\/fieldtripgb@BNG\/3\/21\/37.jpg?version=1.1.1&id=22362b279a637a91&app=free&cache=true","code":3}
02-05 11:50:38.234 E/FileTransfer(12658): java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:552)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.IoBridge.recvfrom(IoBridge.java:516)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.io.InputStream.read(InputStream.java:163)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:142)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.io.BufferedInputStream.read(BufferedInputStream.java:227)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.Streams.readAsciiLine(Streams.java:201)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.net.http.HttpEngine.readResponseHeaders(HttpEngine.java:560)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.net.http.HttpEngine.readResponse(HttpEngine.java:813)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.net.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:274)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:168)
02-05 11:50:38.234 E/FileTransfer(12658):   at org.apache.cordova.FileTransfer.download(FileTransfer.java:495)
02-05 11:50:38.234 E/FileTransfer(12658):   at org.apache.cordova.FileTransfer.execute(FileTransfer.java:88)
02-05 11:50:38.234 E/FileTransfer(12658):   at org.apache.cordova.api.PluginManager$1.run(PluginManager.java:231)
02-05 11:50:38.234 E/FileTransfer(12658):   at java.lang.Thread.run(Thread.java:856)
02-05 11:50:38.234 E/FileTransfer(12658): Caused by: libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.Posix.recvfromBytes(Native Method)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.Posix.recvfrom(Posix.java:131)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164)
02-05 11:50:38.234 E/FileTransfer(12658):   at libcore.io.IoBridge.recvfrom(IoBridge.java:513)
02-05 11:50:38.234 E/FileTransfer(12658):   ... 15 more
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-08 18:42:31

不支持,但这是一个功能请求https://issues.apache.org/jira/browse/CB-2394

票数 1
EN

Stack Overflow用户

发布于 2016-01-21 08:16:33

似乎他们决定不将其作为一种选择来实现,所以只剩下使用abort()setTimeout()的唯一选择。

由于对下载/上传设置任意的时间限制似乎很天真,因此我将从fileTransfer.onProgress()重置超时

如下所示:

代码语言:javascript
复制
var downloadTimer = setTimeout(function () {
    downloadTimerExceeded(fileTransfer);
}, 30000);

fileTransfer.onprogress = function (progressEvent) {
        if (downloadTimer) {
            clearTimeout(downloadTimer); //cancel the previous timer.
            downloadTimer = null;
        }
        downloadTimer = setTimeout(function () {
            downloadTimerExceeded(fileTransfer);
        }, 30000);
};

function downloadTimerExceeded(fileTransfer) {
    fileTransfer.abort();
}

如果他们在FileTransfer本身上有一个超时选项,那会更好。

票数 9
EN

Stack Overflow用户

发布于 2013-02-06 12:50:00

您尝试过使用chunkedMode选项吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14708422

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档