我正在使用此文件选择器将文件上传到我的服务器:
https://github.com/jcesarmobile/FilePicker-Phonegap-iOS-Plugin
我的服务器需要base64文件,所以我需要转换我上传的文件。我正在使用离子文档中提到的文件插件。所以我的代码看起来像这样:
uploadIOS(){
var self=this
let utis = ["public.data"]
FilePicker.pickFile(
function (uri) {
let correctPath = uri.substr(0, uri.lastIndexOf('/') + 1);
let currentName = uri.substring(uri.lastIndexOf('/') + 1);
self.file.readAsDataURL(correctPath, currentName).then(result=>{
console.log ('reading data ' + JSON.stringify(result))
}).catch((err)=>{
console.log ('err4' + JSON.stringify(err))
})
},
function (error) {
console.log(JSON.stringify(error));
},
function (utis) {
console.log('UTIS', this.utis)
}
)
}
但是当我从Google云端硬盘或iCloud Drive或DropBox上传时,它会返回
{"代码":5,"消息":" ENCODING_ERR"}
答案 0 :(得分:1)
let self = this;
self.filePicker.pickFile().then(uri => {
let correctPath = uri.substr(0, uri.lastIndexOf('/') + 1);
let currentName = uri.substring(uri.lastIndexOf('/') + 1);
self.file.readAsDataURL("file:///" + correctPath, currentName).then(result=>{
})
我已使用此代码解决了此问题。
答案 1 :(得分:0)
我对您正在使用的FilePicker了解不多,但为什么不尝试使用Ionic本机组件来使用相机?试试https://ionicframework.com/docs/native/camera/它真的很容易使用(链接中有一个例子)我通常会这样使用它:
public selectFromGallery() {
var options: CameraOptions = {
sourceType: this.camera.PictureSourceType.PHOTOLIBRARY,
destinationType: this.camera.DestinationType.FILE_URI,
targetWidth: 640,
targetHeight: 480,
correctOrientation: true,
quality: 100
};
this.camera.getPicture(options).then((imageData) => {
return this.makeFileIntoBlob(imageData);
}).then((imageBlob) => {
this.cameraData = imageBlob;
this.imageUpload(this.createFileName());
}, (err) => {
this.db.logMessage(new LogEntity("Error while selecting image", this.user.uid, JSON.stringify(err)), LogType.Error);
this.presentToast(this.translations.code_image);
});
}
getPicture方法返回一个promise,该promise返回base64字符串或文件URI。在我的情况下,我返回一个URI,但只需将选项destinationType更改为this.camera.DestinationType.DATA_URL
,您将获得一个base64字符串并进入then语句:let base64Image = 'data:image/jpeg;base64,' + imageData;
希望它可以帮到你!