收到没有扩展名的QuickBlox文件附件

时间:2018-12-10 17:04:48

标签: android nativescript quickblox

我正在开发NativeScript Android应用程序并使用QuickBlox。 我可以在应用程序内打开图像和音频文件,但是.pdf,Word和Excel文档存在一些问题。

由同事编写的代码:

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

我获得带有blob +会话令牌的URL,然后:

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返回时没有扩展名。 我还尝试通过privateUrl()获取URL(不插入令牌),结果相同。

另一种无效的方法:

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]

在Windows和iOS Safari的Chrome浏览器上,文件已正确下载或在浏览器中打开。在Android上,它将在以下浏览器上返回而没有扩展名:Chrome e LineageOS库存浏览器。在Internet Samsung 7.4.00.70上,它已在浏览器中正确打开。

使用httpModule.request(),我在调试控制台上收到关于结果的警告:

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

1 个答案:

答案 0 :(得分:0)

目前,我正在本机代码中使用此替代方法,但稍后我将需要找到在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);