使用 Ionic 文件选择器上传 PDF 后文件数据为空,PDF 已损坏
File data is empty after uploading a PDF with Ionic File Chooser, PDF corrupted
我正在使用来自 @ionic-native/chooser/ngx
的插件 Chooser
: https://ionicframework.com/docs/native/chooser
我的目标是从我 phone 上的下载中获取 PDF 文件,并将其发送到 base64
中的服务器。但是我的服务器收到损坏的 PDF。
我是这样使用它的:
openFiles() {
this.chooser
.getFile('application/pdf')
.then((file) => {
console.log('L-119 --> File : ' + JSON.stringify(file));}
但是当我在我的控制台中读取文件时,我得到了这个:
我的数据是空的! 所以我对此无能为力,或者我遗漏了什么?
例如,对于一张照片,我正在使用相机插件,如下所示:
this.camera.getPicture(options).then(
(imageData) => {
console.log('file ' + JSON.stringify(imageData));
我得到的结果是:
我的服务器得到一个正确的文件并且可以打开它。您知道我如何使用 Ionic chooser
插件中的这些信息来正确发送我的 PDF 吗?
我想用 Ionic 的方式来做。
编辑 1:
使用 Ionic 的 Base64 插件
const filePath = file.uri;
this.base64.encodeFile(filePath).then(
(base64File: string) => {
console.log('my base 64 file is ' + base64File);
},
(err) => {
console.log(err);
}
);
结果:
我来自 Base64
插件的 base64 文件仍然是空的。
编辑 2:
对于Base64,我们需要给出文件的路径,而不是URI。为了获得路径,我使用了 Ionic File Path
这样的:
this.filePath
.resolveNativePath(file.uri)
.then((resultat) => console.log('file path ' + resultat))
.catch((err) => console.log(err));
我收到这个:file:///storage/emulated/0/Download/dummy.pdf'
然后使用@Najam Us Saqib 的回答,我在该路径中使用 Ionic Base64
,我得到了这个:
问题已解决!
使用 base64
插件 Base64 将您的文件转换为 base64 并将其发送到服务器。
将您的 FilePath 传递给该插件,它会将您的文件转换为 base64。
P.S: 我建议你上传文件,因为它不使用 base64。它将提高您的应用程序性能。
import { Base64 } from '@ionic-native/base64/ngx';
constructor(private base64: Base64) { }
...
let filePath: string = 'file:///...';
this.base64.encodeFile(filePath).then((base64File: string) => {
console.log(base64File);
}, (err) => {
console.log(err);
});
我正在使用来自 @ionic-native/chooser/ngx
的插件 Chooser
: https://ionicframework.com/docs/native/chooser
我的目标是从我 phone 上的下载中获取 PDF 文件,并将其发送到 base64
中的服务器。但是我的服务器收到损坏的 PDF。
我是这样使用它的:
openFiles() {
this.chooser
.getFile('application/pdf')
.then((file) => {
console.log('L-119 --> File : ' + JSON.stringify(file));}
但是当我在我的控制台中读取文件时,我得到了这个:
我的数据是空的! 所以我对此无能为力,或者我遗漏了什么?
例如,对于一张照片,我正在使用相机插件,如下所示:
this.camera.getPicture(options).then(
(imageData) => {
console.log('file ' + JSON.stringify(imageData));
我得到的结果是:
我的服务器得到一个正确的文件并且可以打开它。您知道我如何使用 Ionic chooser
插件中的这些信息来正确发送我的 PDF 吗?
我想用 Ionic 的方式来做。
编辑 1:
使用 Ionic 的 Base64 插件
const filePath = file.uri;
this.base64.encodeFile(filePath).then(
(base64File: string) => {
console.log('my base 64 file is ' + base64File);
},
(err) => {
console.log(err);
}
);
结果:
我来自 Base64
插件的 base64 文件仍然是空的。
编辑 2:
对于Base64,我们需要给出文件的路径,而不是URI。为了获得路径,我使用了 Ionic File Path
这样的:
this.filePath
.resolveNativePath(file.uri)
.then((resultat) => console.log('file path ' + resultat))
.catch((err) => console.log(err));
我收到这个:file:///storage/emulated/0/Download/dummy.pdf'
然后使用@Najam Us Saqib 的回答,我在该路径中使用 Ionic Base64
,我得到了这个:
问题已解决!
使用 base64
插件 Base64 将您的文件转换为 base64 并将其发送到服务器。
将您的 FilePath 传递给该插件,它会将您的文件转换为 base64。
P.S: 我建议你上传文件,因为它不使用 base64。它将提高您的应用程序性能。
import { Base64 } from '@ionic-native/base64/ngx';
constructor(private base64: Base64) { }
...
let filePath: string = 'file:///...';
this.base64.encodeFile(filePath).then((base64File: string) => {
console.log(base64File);
}, (err) => {
console.log(err);
});