У меня есть компонент камеры, который я нажимаю на картинку. Я сохраняю изображение, по которому щелкнули, с помощью файловой системы expo в локальном каталоге cacheDirectory. Выглядит примерно так:
onPictureSaved = async photo => {
await FileSystem.moveAsync({
from: photo.uri,
to: `${FileSystem.cacheDirectory}test.jpg`
});}
Мой следующий шаг к моей следующей остановке — преобразование изображения в локальном cacheDirectory в большой двоичный объект и загрузка изображения в S3 через aws-sdk:
var params = {
Bucket: "my-bucket",
Key: 'test.jpg',
Body: blob
};
s3.upload(params, function(err, data) {
if (err) {
console.info(err);
} // an error occurred
else {
console.info(data);
} // successful response
}
Однако любые методы или модули, которые я устанавливал для выполнения этого крошечного шага в процессе, вообще не работали. Я не могу использовать RNFS, react-native-fetch-blob или любые другие модули, требующие привязки, благодаря экспо-клиенту. Я не хочу отделять выставку только из-за одной вещи. Есть ли другой способ сделать это?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Взгляните на https://github.com/expo/image-upload-example/issues/3#issuecomment-387263080. Последний выпуск выставки поддерживает большие двоичные объекты, поэтому вы можете сделать что-то вроде следующего:
uploadToS3 = async (fileUri, s3Bucket, s3Key) => {
const response = await fetch(fileUri);
const blob = await response.blob();
return new Promise((resolve, reject) => {
const params = {
Bucket: s3Bucket,
Key: s3Key,
Body: blob,
};
s3.upload(params, function(err, data) {
if (err) {
console.info('Something went wrong');
console.info(err);
reject(err);
} else {
console.info('Successfully uploaded image');
resolve(data);
}
});
});
};
Надеюсь это поможет!