Scale up as you grow — whether you're running one virtual machine or ten thousand.

From GPU-powered inference and Kubernetes to managed databases and storage, get everything you need to build, scale, and deploy intelligent applications.

I am trying to upload an image to my DigitalOcean Spaces using the Expo Image Picker and AWS SDK, but I keep encountering this error:
ERROR Error uploading image: [TypeError: Network request failed]
Here’s the relevant code that I’m using to upload the image:
import axios from 'axios';
import * as ImagePicker from 'expo-image-picker';
import { S3Client, PutObjectCommand } from '@aws-sdk/client-s3';
import 'react-native-get-random-values'; // This polyfills crypto.getRandomValues
import { v4 as uuidv4 } from 'uuid';
import { spaces } from '../config/digitalOcean';
import 'react-native-url-polyfill/auto';
import { ReadableStream } from 'web-streams-polyfill';
globalThis.ReadableStream = ReadableStream;
export default function AddItems({ navigation }) {
const [produceName, setProduceName] = useState('');
const [quantity, setQuantity] = useState('');
const [price, setPrice] = useState('');
const [itemImage, setItemImage] = useState('');
const [phoneNumber, setPhoneNumber] = useState('');
const [uploading, setUploading] = useState(false);
const s3Client = new S3Client({
endpoint: spaces.url,
forcePathStyle: false,
region: "blr1",
credentials: {
accessKeyId: spaces.spacesKey,
secretAccessKey: spaces.spacesSecret
}
});
useEffect(() => {
const loadPhoneNumber = async () => {
try {
const storedPhoneNumber = await AsyncStorage.getItem('phone');
if (storedPhoneNumber) {
setPhoneNumber(storedPhoneNumber);
} else {
Alert.alert('Error', 'Phone number not found');
}
} catch (error) {
console.error('Error loading phone number from AsyncStorage:', error);
}
};
loadPhoneNumber();
}, []);
const pickImageAsync = async () => {
let result = await ImagePicker.launchImageLibraryAsync({
allowsEditing: true,
quality: 1,
});
if (!result.canceled) {
uploadImage(result.assets[0]);
} else {
alert('You did not select any image.');
}
};
const getImageBlob = async (uri) => {
const response = await fetch(uri);
const blob = await response.blob();
return blob;
};
const uploadImage = async (imageAsset) => {
setUploading(true);
const fileName = `${uuidv4()}.jpg`;
try {
const response = await fetch(imageAsset.uri);
const blob = await getImageBlob(imageAsset.uri);
console.log("these happened without error")
console.log(response)
console.log(blob)
const params = {
Bucket: spaces.name,
Key: fileName,
Body: blob,
ACL: "public-read",
ContentType: 'multipart/form-data',
};
const data = await s3Client.send(new PutObjectCommand(params));
console.log(data)
const imageUrl = spaces.url + "/" + fileName
setItemImage(imageUrl);
Alert.alert('Success', 'Image uploaded successfully');
} catch (error) {
console.error('Error uploading image:', error);
Alert.alert('Error', 'Failed to upload image');
}
setUploading(false);
};
const handleSubmit = async () => {
if (!produceName || !quantity || !price) {
Alert.alert('Error', 'All fields are required');
return;
}
try {
const formData = {
phoneNumber,
itemName: produceName,
quantity,
price,
itemImage,
};
const response = await axios.post(
'myurl/api/supplier/add-item',
formData
);
if (response.status === 200) {
Alert.alert('Success', 'Item added successfully!');
navigation.goBack();
}
} catch (error) {
console.error('Error adding item:', error.response?.data || error.message);
Alert.alert(
'Error',
error.response?.data?.message || 'Failed to add item, please try again'
);
}
};
Since it is a expo app, in the cors settings i have used “*” as the domain name and enabled all methods (get,put,post etc). It is still giving the network error.
SarkariResultht
KFSys
Arne van Hoorn
alexdo
4287c71658bd4ea39bef277d491b1c
4287c71658bd4ea39bef277d491b1c
Demanix
Demanix
devjk1
Jordan
LC Labs Sp. z o.o.
a0cd9be01b14447384f79073fc121f