QuickBlox файловые вложения получены без расширения - PullRequest
0 голосов
/ 10 декабря 2018

Я занимаюсь разработкой приложения NativeScript для Android и использую QuickBlox.Я могу открыть изображения и аудиофайлы внутри приложения, но есть некоторые проблемы с документами .pdf, Word и Excel.

Код, написанный коллегой:

var attID = message.attachments[0].id
var fileSrc = ChatManager.getQB().content.publicUrl(attID) + "/" + "/download.xml?token=" + ChatManager.getSessionToken()

Я получаюURL с BLOB + токеном сессии, затем:

var intent = new android.content.Intent(android.content.Intent.ACTION_VIEW, android.net.Uri.parse(args.object.src));
intent.addCategory(android.content.Intent.CATEGORY_BROWSABLE);
application.android.startActivity.startActivity(intent);

Таким образом, я успешно загружаю файлы .pdf, но .doc, .docx, .xls и .xlsx возвращаются без расширения.Я также попытался получить URL через privateUrl() (без интерполяции токена), с тем же результатом.

Другой неработающий метод:

httpModule.request({
        url: uid,
        method: 'GET',
        headers: {
            'QuickBlox-REST-API-Version': '0.1.0',
            'QB-Token': ChatManager.getSessionToken()
        }
    }).then(res => {
        var file = res.content.toFile();

var intent = new android.content.Intent(android.content.Intent.ACTION_VIEW);
         var uri = android.net.Uri.fromFile(new java.io.File(file.path));
         intent.setDataAndType(uri, 'application/pdf');
         application.android.startActivity.startActivity(android.content.Intent.createChooser(intent, 'Apri file...'));

});

В любом случае, я пытаюсь, похожеQuickBlox возвращает расширение только для файлов .pdf.Есть предложения?


ОБНОВЛЕНИЕ:

Я пытался открыть URL на разных устройствах.

https://api.quickblox.com/blobs/[blobId]?token=[token]

В Chrome для Windows и iOS Safari файл загружаетсяили правильно открыт в браузере.На Android он возвращается без расширения в следующих браузерах: Chrome e LineageOS.В интернете Samsung 7.4.00.70 корректно открывается в браузере.

При httpModule.request() я получаю это предупреждение в консоли отладки по результату:

Resource interpreted as Document but transferred with MIME type [my file mime type]

1 Ответ

0 голосов
/ 11 декабря 2018

В данный момент я использую этот обходной путь в нативном коде, но позже мне нужно будет найти что-то, что работает и на iOS.Я не отмечаю это как ответ, так как это не решает проблему

var r = new android.app.DownloadManager.Request(android.net.Uri.parse(args.object.src));
r.setDestinationInExternalPublicDir(android.os.Environment.DIRECTORY_DOWNLOADS, fileName.text);
r.allowScanningByMediaScanner();
r.setNotificationVisibility(android.app.DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
var dm = application.android.startActivity.getSystemService(android.content.Context.DOWNLOAD_SERVICE);
dm.enqueue(r);
...