我正在使用此插件获取文件
https://ionicframework.com/docs/native/file-chooser/
当我从 Downloads 文件夹中选择PDF文件时,它像URI
一样给我content://com.android.providers.downloads.documents/document/1015
但是,如果我选择另一个文件,例如 ZIP 或 PNG ,它将解析为合适的路径
content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2Fwws.zip
content://com.android.providers.downloads.documents/document/raw%3A%2Fstorage%2Femulated%2F0%2FDownload%2Fopacity.png
如何从file://…
格式的文件中获取路径。
我尝试了以下方法,但都没有成功:
FilePath.resolveNativePath
和
normalizeURL
更新:
进口
import { File } from '@ionic-native/file';
import { FileChooser } from '@ionic-native/file-chooser'
import { FilePath } from '@ionic-native/file-path';
文件选择器的代码:
getAndroidFile() {
this.fileChooser.open()
.then(uri => {
console.log("uri", uri);
this.file.resolveLocalFilesystemUrl(uri).then((files) => {
console.log("files", files);
}).catch((error) => { console.log("error", error) });
(<any>window).FilePath.resolveNativePath(uri, (result) => {
this.nativepath = result;
console.log("nativepath", this.nativepath);
}, (err) => {
console.log("err", err);
})
})
}
我已经按照亚伦的建议使用了它:
this.file.resolveLocalFilesystemUrl(uri).then((files)=>{
console.log("files",files);
}).catch((error) => { console.log("error", error) });
它仍然返回为:
filesystem: FileSystem {name: "content", root: DirectoryEntry}
fullPath: "/com.android.providers.downloads.documents/document/1015"
isDirectory: false
isFile: true
name: "1015"
nativeURL: "content://com.android.providers.downloads.documents/document/1015"
这是原始网址。
更新2:
getBase64Content(nativepath) {
let path = nativepath.substring(0, nativepath.lastIndexOf('/'));
let filename = nativepath.substring(nativepath.lastIndexOf('/'), nativepath.length);
filename = filename.replace("/", "");
console.log("path", path);
console.log("filename", filename);
this.file.readAsDataURL(path, filename)
.then(content => {
console.log('content1', content);
//this will be passed to web API
this.base64content = content;
})
.catch(err => {
console.log("err", err);
})
}
此base64内容通过api发送到服务器,然后将其转换回文件。
更新3: 对不起,我很晚才回复,真的很忙于另一个项目。 Koken的答案:
您如何测试这个东西? 您使用什么命令执行? 离子科尔多瓦运行Android (我通过使用chrome进行远程调试来检查这些值。)
Android模拟器? Android设备? Android设备。 Redmi note 5 pro(MIUI 10,Android 8.1)。
还...选择文件后的下一步是什么? 此base64内容通过api发送到服务器,然后将其转换回文件。
希望你们能帮助我。给出代码。谢谢
答案 0 :(得分:0)
您需要使用resolveLocalFilesystemUrl
插件中的FileManager
https://ionicframework.com/docs/native/file/#resolveLocalFilesystemUrl