#react-native #upload #document #picker
#react-native #загрузка #документ #средство выбора
Вопрос:
Я внедрил средство выбора документов в своем приложении react native, и оно отлично работает для iOS. Однако в Android у меня странная проблема
Когда я открываю средство выбора документов, и навигация переходит в проводник файлов (раздел загрузок) на телефоне Android, хотя я могу выбрать файл pdf, но, когда дело доходит до приложения, оно прилипает к странице, а файла там нет. Я прикрепил скриншот с таким же поведением, когда проводник переходит к последним файлам. Только когда из последних файлов я выбираю Google Диск и пытаюсь выбрать оттуда PDF-файл, он работает должным образом, и я вижу файл в своем приложении, и приложение не зависает.
Вот что я написал для средства выбора документов PDF
selectPDF = async ()=>{
var imageList = [...this.state.files];
try {
const results = await DocumentPicker.pickMultiple({
type: [DocumentPicker.types.pdf],
});
for (const res of results) {
console.log(
res.uri,
res.type, // mime type
res.name,
res.size
);
const fileName = res.uri.replace("file://","");
let data1 = ''
RnFetchBlob.fs.readStream(
fileName,
'base64',
4095
)
.then((ifstream)=>{
//let data1 = ''
ifstream.open()
ifstream.onData((data)=>{
data1 = data;
})
ifstream.onEnd(() => {
let base64 = data1
imageList.push({
imageName:res.name,
image:base64,
mime:res.type,
size:res.size
})
this.setState({
...this.state,
openCamera:false,
lastFileName:imageList[imageList.length - 1].imageName,
files:imageList
})
})
})
}
} catch (err) {
if (DocumentPicker.isCancel(err)) {
this.closeModal();
} else {
throw err;
}
}
}
Может кто-нибудь рассказать о том, чего мне может не хватать. Необходимо установить некоторую конфигурацию на уровне устройства или любую другую вещь.
Ответ №1:
вы можете использовать что-то вроде этого,
const [file, setFile] = useState(null);
const selectFile = async () => {
try {
const results = await DocumentPicker.pickMultiple({
type: [DocumentPicker.types.allFiles],
});
setFile(results);
} catch (err) {
if (DocumentPicker.isCancel(err)) {
alert('Canceled');
} else {
alert('Unknown Error: ' JSON.stringify(err));
throw err;
}
}
};
теперь вы можете вызвать file в своей функции
и использовать его, вы можете сделать так
<TouchableOpacity
activeOpacity={0.5}
onPress={selectFile}>
<Text>Select File</Text>
</TouchableOpacity>