Я использую HTML input
для выбора файла в моем приложении Ionic3/Angular. Я использую код ниже:
// в файле .html
<input #fileUpload type="file" name="myfile"(change)="onFileChoose($event)"/>
// в файле .ts
onFileChoose($event): void {
this.fileChooser.getFileInfo($event).then((result) => {
this.fileName = result.fileName;
this.fileData = this.sanitizeFileData(result.fileData);
this.fileSize = result.fileSize;
this.fileType = result.fileType;
}, (error) => {
this.helperProvider.createAlert('Alert', 'File is corrupted.');
});
}
getFileInfo(event: Event): Promise<any> {
let target = event && event.target;
let files: Array<File> = target && target['files'];
console.log(files[0].type);
console.log(files[0].name);
return new Promise((resolve, reject) => {
if (files && files.length) {
files = Array.from(files);
let fileName = files[0].name;
let fileSize = files[0].size;
let fileType = files[0].type;
let fileReader = new FileReader();
fileReader.onload = () => resolve({
fileData: fileReader.result,
fileName: fileName,
fileSize: fileSize,
fileType: fileType
});
fileReader.onerror = error => reject(error);
fileReader.onabort = error => reject(error);
fileReader.readAsDataURL(files[0])
}
});
}
Это отлично работает в iOS
и Browser
. Как в Android, так и в браузере я мог получить исходное имя, размер и тип файла. Но проблема возникает в Android.
Сценарий-1 (Android): когда я выбираю файл изображения с помощью средства выбора файлов, я могу получить исходное имя файла, размер и тип файла.
Сценарий 2 (Android). Когда я выбираю файл, отличный от файла изображения, например .pdf, .doc и т. д., я не могу получить оригинальное имя файла и тип файла. Предположим, я выбрал имя файла "sample.pdf", но после того, как я выбрал файл, я получаю имя файла в виде случайного числа, например 45675 и самое главное, тип файла, который я получил, пустой.
Затем я исследовал stackoverflow и увидел эти ссылки (link1 и ссылка2). Это может быть проблемой безопасности для Android.
Существует библиотека ionic-native/file-chooser, но она предназначена только для < strong>платформа Android.
Есть ли способ заставить Android указать исходное имя файла?