我正在开发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]
答案 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);