React Native Firebase 多图上传问题
React Native Firebase Multiple Image Upload Problem
在 React Native 中,我 select 使用 ImagePicker 包的图像并将图像上传到 Firebase 存储。我还想使用 Getdownloadurl() 方法和 Firebase Rest Api.
发送 Firebase 存储图像链接
我设法上传了图片,但是当我通过休息 api post 请求发送它们时,图片链接变为 未定义。 我'我从控制台屏幕发出 post 请求,但图像总大小没有达到 100%。
const uploadImage = async (uploadUri: string, transferred: number) => {
let filename = uploadUri.substring(uploadUri.lastIndexOf('/') + 1);
transferred = 0;
const storageRef = storage().ref(`images/${filename}`);
const task = storageRef.putFile(uploadUri);
task.on('state_changed', taskSnapshot => {
console.log(`${taskSnapshot.bytesTransferred} transferred out of ${taskSnapshot.totalBytes}`);
transferred = Math.round((taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) * 100);
});
try {
await task;
const url = await storageRef.getDownloadURL();
return url;
} catch (error) {
console.log(error);
return null;
}
}
export const addPost = (files: string[], post: Post): ThunkAction<void, RootState, null, AddPostAction> => {
return async dispatch => {
try {
dispatch({ type: ADD_POST_LOADING, payload: true });
const imageData: Image[] = [];
files.map(async (item) => {
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
});
const postData: Post = {
...post,
thumb: imageData[0].image
}
const response = await fetch(`${BASE_URL}/post.json`, { method: "POST", body: JSON.stringify(postData) });
if (response.ok) {
const successPostData: AddPostSuccess = await response.json();
dispatch({ type: ADD_POST_SUCCESS, payload: successPostData });
} else {
dispatch({ type: ADD_POST_ERROR, payload: "404" });
}
} catch (error) {
console.log(error);
}
}
}
A map
无法处理 async
代码。尝试更改此部分:
files.map(async (item) => {
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
});
对此:
for (let i = 0; i < files.length; i++) {
const item = files[i];
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
}
在 React Native 中,我 select 使用 ImagePicker 包的图像并将图像上传到 Firebase 存储。我还想使用 Getdownloadurl() 方法和 Firebase Rest Api.
发送 Firebase 存储图像链接我设法上传了图片,但是当我通过休息 api post 请求发送它们时,图片链接变为 未定义。 我'我从控制台屏幕发出 post 请求,但图像总大小没有达到 100%。
const uploadImage = async (uploadUri: string, transferred: number) => {
let filename = uploadUri.substring(uploadUri.lastIndexOf('/') + 1);
transferred = 0;
const storageRef = storage().ref(`images/${filename}`);
const task = storageRef.putFile(uploadUri);
task.on('state_changed', taskSnapshot => {
console.log(`${taskSnapshot.bytesTransferred} transferred out of ${taskSnapshot.totalBytes}`);
transferred = Math.round((taskSnapshot.bytesTransferred / taskSnapshot.totalBytes) * 100);
});
try {
await task;
const url = await storageRef.getDownloadURL();
return url;
} catch (error) {
console.log(error);
return null;
}
}
export const addPost = (files: string[], post: Post): ThunkAction<void, RootState, null, AddPostAction> => {
return async dispatch => {
try {
dispatch({ type: ADD_POST_LOADING, payload: true });
const imageData: Image[] = [];
files.map(async (item) => {
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
});
const postData: Post = {
...post,
thumb: imageData[0].image
}
const response = await fetch(`${BASE_URL}/post.json`, { method: "POST", body: JSON.stringify(postData) });
if (response.ok) {
const successPostData: AddPostSuccess = await response.json();
dispatch({ type: ADD_POST_SUCCESS, payload: successPostData });
} else {
dispatch({ type: ADD_POST_ERROR, payload: "404" });
}
} catch (error) {
console.log(error);
}
}
}
A map
无法处理 async
代码。尝试更改此部分:
files.map(async (item) => {
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
});
对此:
for (let i = 0; i < files.length; i++) {
const item = files[i];
const imageUrl = await uploadImage(item, 0);
imageData.push({ image: imageUrl! });
}