reactjs - 来自 GCS 的带有公共 URL 的图像在状态更新后不会立即显示,但在刷新页面后可以工作
问题描述
我有一个表单,可以使用@google-cloud/storage将数据上传到 mongoDB 并将图像上传到 Google Cloud Storage 的存储桶中。这些图像具有公共 URL。提交后,我立即对我的后端进行 API 调用,然后更新我的状态。但是,最近上传的图像不会显示,只会响应 403 错误。使用 img 标签在公共 URL 上获取请求时出错
我的提交处理函数:
const handleSubmit = async () => {
const repairData = new FormData();
try {
if (state.device && state.issue && state.image) {
repairData.append("device", state.device);
repairData.append("customer", user._id);
repairData.append("issue", state.issue);
repairData.append("image", state.image);
repairData.append("expedite", state.expedite);
await api.post("/requests/create", repairData, {
headers: { "auth-token": token },
});
setState({
device: "",
issue: "",
image: null,
expedite: "No",
hasError: false,
errorMessage: "",
});
setShow(false);
getRepairs();
} else {
setState({
...state,
success: false,
hasError: true,
errorMessage: "Missing required information!",
});
}
} catch (error) {
console.log(error);
}
};
我的 API 调用函数:
const getRepairs = async () => {
try {
const response = await api.get("/user/requests/", {
headers: { "auth-token": token },
});
setRequests([...response.data.repairs]);
} catch (error) {
console.log(error);
}
};
仅显示缓存的图像。当页面刷新时,图像将相应显示。我也可以在浏览器上查看图像。我已经尝试过可能的事情,比如这个,但它仍然不起作用。
解决方案
正如@Jan Hernandez所说,我检查了我的谷歌云上传功能,它正在响应,即使它还没有完成上传!傻我。
原来的
await storage
.bucket(process.env.BUCKET_NAME)
.upload(filename, options, (err, file, cb) => {
if (err)
return res.status(409).json({
message: "Error uploading!",
});
});
return res.status(200).json({
repair: req.repair,
message: "Upload successful",
});
正确的
await storage
.bucket(process.env.BUCKET_NAME)
.upload(filename, options, (err, file, cb) => {
if (err)
return res.status(409).json({
message: "Error uploading!",
});
res.sendStatus(200);
});
推荐阅读
- c++ - CMAKE + SQLite3.dll
- php - Doctrine OneToMany 关系的问题
- ctypes - py 自动化入门
- django - Django BooleanField - 复选框未显示在网站的表单中
- reactjs - React Loader - 尝试在发出 api 请求时获取加载器并在获取响应时停止它
- django - 每当电子邮件发送失败时回滚保存的对象
- node.js - 节点如何使用事件循环处理同步和异步代码?
- dart - 我可以从 json 字符串创建一个 const 对象吗?
- android - Android 设备上的像素溢出 - Flutter
- f# - F# 是否具有与 Haskell 相同的类型和数据构造函数定义?