vue.js - Web Worker 中的 AWS SDK V3 S3Client 引发 ReferenceError:未定义窗口
问题描述
在 Vue JS 应用程序中,我使用网络工作者生成签名 URL。此代码使用@aws-sdk/client-s3
3.0.0 版没有问题。但是,更高版本的getSignedUrl()
调用失败并显示错误“ ReferenceError: window is not defined
”。
(worker.js)
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3';
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
async function generateUrls(s3config, bucket, filename) {
let getParams = {
Bucket: bucket,
Key: filename
};
let url;
const clientS3 = new S3Client(s3config);
const getCmd = new GetObjectCommand(getParams);
try {
url = await getSignedUrl(clientS3, getCmd);
} catch (err) {
console.log('Error getting signed URL ', err);
}
return url;
}
我知道网络工作者在不同的上下文中运行并且无权访问主线程的window。我在 3.0.0 之后跟踪到 AWS 库 client-s3 并看到(出于某种原因)它假设存在window。
在网络工作者中使用 S3 客户端是否有一些技巧,或者这是一个错误?
解决方案
通过将它放在代码的某个位置,它在 AWS dynamodb 上对我有用
if(typeof window != "object")
self.window = self;
v3 现在正在开发 cloudflare。
推荐阅读
- c# - 在 LINQ 中使用 SQL“不在”
- google-cloud-spanner - 使用 Spanner R2DBC 和 Spring Data 的只读事务
- esp32 - 基于 ESP32 的网络收音机
- html - 移动设备顶部的不同空间 - 如何修复?
- powerbi - 需要在切片器 power bi 中基于日期的选择显示上个月 MTD
- react-native - React Native - 有没有最好的方法给每个按钮的样式“borderRadius”?
- php - 使用 PHP 从输入中确定类型值
- tensorflow2.x - TensorFlow:“NotImplementedError:子类化 `Model` 类时,您应该实现 `call` 方法。”
- node.js - 如何终止我的功能,它正在工作但永无止境
- python - 类型错误:使用 async with 代替