javascript - 上传两张图片时,console.log(parsedRes) 只返回一个对象而不是(预期的)两个
问题描述
所以,我试图从我上传到云/服务器的两个图像中获取 base64 数据(url),但是当我解析响应时,我只得到 1 个对象而不是 2 个(即只有第一个图像的 url)。
我必须从根本上监督某些事情,但我看不到它。欣赏建议。
有人能帮我解释一下为什么下面的代码不起作用吗?
[编辑:我已经包含了服务器代码。希望这可以让我更清楚地了解我面临的问题]
.then(token => {
authToken = token;
return fetch("myappURL/storeImage",
{
method: "POST",
body: JSON.stringify({
image: image.base64,
coverImage: coverImage.base64
}),
headers: { Authorization: "Bearer " + authToken }
});
})
.catch(err => {
console.log(err);
alert("Oops! Something went wrong, please try again1")
dispatch(uiStopLoading());
})
.then(res => {
if (res.ok) {
return res.json();
} else {
throw(new Error());
}
})
.then(parsedRes => {console.log(parsedRes)}); // I only get 1 result instead of 2 (why?!)
服务器端代码:
exports.storeImage = functions.https.onRequest((request, response) => {
return cors(request, response, () => {....
.then(decodedToken => {
const body = JSON.parse(request.body);
fs.writeFileSync("/tmp/uploaded-image.jpg", body.image, "base64", err => {
console.log(err);
return response.status(500).json({ error: err });
});
const bucket = gcs.bucket("myapp.appspot.com");
const uuid = UUID();
return bucket.upload(
"/tmp/uploaded-image.jpg",
{
uploadType: "media",
destination: "/places/" + uuid + ".jpg",
metadata: {
metadata: {
contentType: "image/jpeg",
firebaseStorageDownloadTokens: uuid
}
}
},
(err, file) => {
if (!err) {
return response.status(201).json({ // I get this returned
imageUrl:
"https://firebasestorage.googleapis.com/v0/b/" +
bucket.name +
"/o/" +
encodeURIComponent(file.name) +
"?alt=media&token=" +
uuid,
imagePath: "/places/" + uuid + ".jpg"
});
} else {
console.log(err);
return response.status(500).json({ error: err });
}
}
);
})
.catch(error => {
console.log("Token is invalid!");
response.status(403).json({error: "Unauthorized"});
})
.then(decodedToken => {
const body = JSON.parse(request.body);
fs.writeFileSync("/tmp/uploaded-coverImage.jpg", body.coverImage, "base64", err => {
console.log(err);
return response.status(500).json({ error: err });
});
const bucket = gcs.bucket("myapp.appspot.com");
const uuid = UUID();
return bucket.upload(
"/tmp/uploaded-coverImage.jpg",
{
uploadType: "media",
destination: "/coverPlaces/" + uuid + ".jpg",
metadata: {
metadata: {
contentType: "coverImage/jpeg",
firebaseStorageDownloadTokens: uuid
}
}
},
(err, coverFile) => {
if (!err) {
return response.status(201).json({ // I do NOT get this returned (why not?!)
coverImageUrl:
"https://firebasestorage.googleapis.com/v0/b/" +
bucket.name +
"/o/" +
encodeURIComponent(coverFile.name) +
"?alt=media&token=" +
uuid,
coverImagePath: "/coverPlaces/" + uuid + ".jpg"
});
} else {
console.log(err);
return response.status(500).json({ error: err });
}
}
);
})
.catch(error => {
console.log("Token is invalid!");
response.status(403).json({error: "Unauthorized"});
});
});
});
解决方案
推荐阅读
- docker - XWiki 停止后无法启动服务器
- javascript - Alt键按下的意外结果
- r - R 中的商业四舍五入 - 即总是从 0.5 开始四舍五入?
- python - 对内层多索引列进行操作
- java - Scala List to Java 不能转换
- powershell - Powershell如何将除新创建的文件之外的所有内容移动到另一个目录
- json - 可在 json 中使用随机元素进行编码
- python - Python:: 关于使用 matplotlib 在一个窗口中绘制多个图形
- python - 使用 Python 在 Windows 10 中对 Selenium Chrome 窗口进行分组
- python - RuntimeError:CUDA 错误:仅使用 GPU 调用 `cublasSgemm(handle)` 时出现 CUBLAS_STATUS_EXECUTION_FAILED