Я разрабатываю приложение на родном языке для Android, я использую RNFetchBlob для загрузки APK. и в Android RNFetchBlob использует библиотеку OkHttp для загрузки файла. Но APK не может скачать. Когда я помещаю ссылку в Android, он может загрузить файл успешно.
Я пытаюсь заменить его другим URL-адресом, RNFetchBlob может загрузить файл.
Но мой URL-адрес является простым URL: http://host:port/AppDownLoad/publish/some.apk
Конфигурация RNFetchBlob являетсяниже:
RNFetchBlob.config({
path: dirs.DCIMDir + "/Some.apk",
timeout:180000,
})
.fetch("GET", APK_URL)
.progress({ count: 10 }, (received, total) => {
let currentProgress = received / total;
})
.then(res => {
if(res.respInfo.timeout){
Linking.openURL(APKURL)
return;
}
android.actionViewIntent(
res.path(),
"application/vnd.android.package-archive"
);
})
.catch(error => {
console.log(error);
// Linking.openURL(APKURL)
});
исходный код третьей библиотеки OkHttp:
OkHttpClient.Builder clientBuilder;
if (this.options.trusty) {
clientBuilder = RNFetchBlobUtils.getUnsafeOkHttpClient(client);
} else {
clientBuilder = client.newBuilder();
}
final Request.Builder builder = new Request.Builder();
try {
builder.url(new URL(url));
} catch (MalformedURLException e) {
e.printStackTrace();
}
builder.method("GET", null);
final Request req = builder.build();
clientBuilder.connectionPool(pool);
clientBuilder.retryOnConnectionFailure(false);
clientBuilder.followRedirects(options.followRedirect);
clientBuilder.followSslRedirects(options.followRedirect);
clientBuilder.retryOnConnectionFailure(true);
OkHttpClient client = enableTls12OnPreLollipop(clientBuilder).build();
Call call = client.newCall(req);
taskTable.put(taskId, call);
call.enqueue(new okhttp3.Callback(),{callback}
информация об ошибке the content-length is disagreed with the stream
Может кто-нибудь сказать мне, почему?