我正在创建一个应用程序,您可以在其中将照片和其他一些数据上传到Firebase。上传部分在一张图片上运行得非常完美。但是,我现在添加了一个多图像图片(选择1到5张图片),并希望我的图像上载功能上载5张图片,而不是1张图片。图像上载与提供的1个图像一起工作,因此如何重新排列代码以上载阵列中x数量的照片?
图片与以下数据一起添加到照片数组中(下面显示的输出是从获取的图像中获取的console.log);
Array [
Object {
"exists": true,
"file": "ph://8905951D-1D94-483A-8864-BBFDC4FAD202/L0/001",
"isDirectory": false,
"md5": "f9ebcab5aa0706847235887c1a7e4740",
"modificationTime": 1574493667.505371,
"size": 104533,
"uri": "ph://8905951D-1D94-483A-8864-BBFDC4FAD202/L0/001",
},
有了这个didFocus,我检查是否设置了fethedImages参数,并将照片数组设置为获取的图像(所以上面显示的所有数据)
const didFocusSubscription = props.navigation.addListener(
'didFocus', () => {
let fetchedImages = props.navigation.getParam('fetchedImages')
console.log(fetchedImages)
setPhotos(fetchedImages)
setImageValid(true)
calculateImageDimensions()
}
);
当我保存页面并开始分派数据时,我运行以下命令,运行上传图像功能,并返回上传URL,然后将其保存在分派功能中,稍后将获取Firebase数据库;
uploadurl = await uploadImageAsync(photos)
因此uploadImageAsync从转发的照片数组开始。如何确保为每张照片启动以下功能。数组中的uri?我可以用吗。对于这一点,我应该在什么环境下使用它?此外,我也不太确定如何将URL数组发回并与其余信息一起保存。
async function uploadImageAsync(photos) {
console.log('uploadImage is gestart')
// Why are we using XMLHttpRequest? See:
// https://github.com/expo/expo/issues/2402#issuecomment-443726662
const blob = await new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.onload = function () {
resolve(xhr.response);
};
xhr.onerror = function (e) {
console.log(e);
reject(new TypeError('Network request failed'));
};
xhr.responseType = 'blob';
xhr.open('GET', photos, true);
xhr.send(null);
});
const ref = firebase
.storage()
.ref()
.child(uuid.v4());
const snapshot = await ref.put(blob);
// We're done with the blob, close and release it
blob.close();
return await snapshot.ref.getDownloadURL();
}
==============编辑,因为上传====================的进展
我再一次走得更远了一点。然而,图像上传功能现在正在运行,由于是多个图像,我希望在继续之前等待所有图像的响应。
try {
uploadurl = await uploadImageAsync()
address = await getAddress(selectedLocation)
console.log(uploadurl)
if (!uploadurl.lenght) {
Alert.alert('Upload error', 'Something went wrong uploading the photo, plase try again', [
{ text: 'Okay' }
]);
return;
}
dispatch(
这时,我开始上传ImageAsync函数。在他的帮助下console.log我看到它上传图像,它们也出现在网上。但是当上传图片时,上传网址已经返回0,并显示警报并停止该功能。
uploadImageAsync = async () => {
const provider = firebase.database().ref(`providers/${uid}`);
let imagesArray = [];
try {
await photos.map(img => {
let file = img.data;
const path = "Img_" + uuid.v4();
const ref = firebase
.storage()
.ref(`/${uid}/${path}`);
ref.putString(file).then(() => {
ref
.getDownloadURL()
.then(images => {
imagesArray.push({
uri: images
});
console.log("Out-imgArray", imagesArray);
})
return imagesArray <== this return imagesArray is fired to early and starts the rest of my upload function.
} catch (e) {
console.error(e);
}
};
因此,一次不和谐的谈话给我指明了promise的方向。所有这些功能都可以让它工作。我试过了,但是打开了另一个堆栈溢出主题来让它工作。
在继续功能之前,等待图像上传的响应
我的图片上传功能的解决方案在上面的主题中;
uploadImages = () => {
const provider = firebase.database().ref(`providers/${uid}`);
// CHANGED: removed 'let imagesArray = [];', no longer needed
return Promise.all(photos) // CHANGED: return the promise chain
.then(photoarray => {
console.log('all responses are resolved successfully');
// take each photo, upload it and then return it's download URL
return Promise.all(photoarray.map((photo) => { // CHANGED: used Promise.all(someArray.map(...)) idiom
let file = photo.data;
const path = "Img_" + uuid.v4();
const storageRef = firebase // CHANGED: renamed 'ref' to 'storageRef'
.storage()
.ref(`/${uid}/${path}`);
let metadata = {
contentType: 'image/jpeg',
};
// upload current photo and get it's download URL
return storageRef.putString(file, 'base64', metadata) // CHANGED: return the promise chain
.then(() => {
console.log(`${path} was uploaded successfully.`);
return storageRef.getDownloadURL() // CHANGED: return the promise chain
.then(fileUrl => ({uri: fileUrl}));
});
}));
})
.then((imagesArray) => { // These lines can
console.log("Out-imgArray: ", imagesArray) // safely be removed.
return imagesArray; // They are just
}) // for logging.
.catch((err) => {
console.error(err);
});
};
问题内容: 我也曾在SO和其他教程中发表过很多文章,但是我没有得到任何最新的官方或其他文章,这些文章不包含使用Volley上传多个图像的弃用代码。我知道Apache HTTP Client删除并在新的android M中相关,因此建议改用下面的方法。 那么,有谁能帮我完成新的不推荐使用的少排球类上载多张图片的工作? 问题答案: 您可以从此处使用volley的最新版本。这是一个非官方的镜像,带有一些
问题内容: 我是在项目中使用代码点火器的新用户,上载多个文件时遇到一个问题,但最后一个仅插入到所有图像“三个图像”字段中。 我的控制器是: 我的观点是: 请帮助如何插入3张图像。 我的资料库 问题答案: HTML: PHP的:
我在SO和其他tuts中看了很多帖子,但我无法得到任何最新的官方或其他帖子,其中不包含任何关于使用排球上传多个图片的不推荐代码。我了解了Apache HTTP客户端删除和新android M中的相关内容,所以更喜欢使用下面的内容。
问题内容: 我正在使用以下代码将单个图像上传到服务器: 如何通过编辑此代码在单个参数中上传多张图片? 问题答案: Swift 3 只需在图像上传参数中使用“ []”即可使其成为图像数组。
本文向大家介绍Angular下H5上传图片的方法(可多张上传),包括了Angular下H5上传图片的方法(可多张上传)的使用技巧和注意事项,需要的朋友参考一下 最近做的项目中用到了angular下上传图片功能,在做的过程中遇到了许多问题,最终都得以解决 angular上传时和普通上传时过程差不多,只不过是要不一些东西转化为angular的东西。 1.ng-file-select,指令angular
问题内容: 我在Swift iOS项目中使用Google Firebase。我的应用程序有一部分,用户从设备中选择多张照片进行上传。我正在尝试找到最佳实践,以将他们一次选择的所有照片上传到Firebase Storage。我知道如何上传一张照片。 我浏览了文档,没有看到有关上载多个NSData对象的任何方法,所以我只需要运行for循环并分别上载每个图像? 谢谢!感谢所有反馈。 问题答案: @Fra
问题内容: 我想使用node.js合并2张图片。或者更确切地说,我想将一个较小的图像放置在较大图像上的坐标x,y上。甚至更精确:我有一个眼镜的图像和一张脸的图像,并且我想将眼镜放在脸上。我做了一些谷歌搜索,发现了一些图像处理库,但似乎没有一个能够合并图像。 问题答案: 我用过: https://github.com/learnboost/node- canvas 做类似的事情(动态地从组件构建合成
本节将帮助您一步一步创建一张地图。该地图的最终效果如下。 分享链接:http://d.dituzhe.com/ShareMap/0EB1C2 1 地图分析 该地图包含两个图层,一个是点图层,指我们的店铺信息。一个是面图层,指我们的销售区域。下面将介绍如何创建这些数据,以及如何将这些数据添加到地图中,并设置数据的显示样式。 2 创建店铺数据 点击首页的“数据管理”页面,进入后点击“新增数据”按钮 在