記事ディレクトリ
- 序文
- 遭遇した問題
-
- 1. NoSuchBucket : 指定されたバケットは存在しません。
- 2. com.aliyuncs.Exceptions.ClientException: InvalidParameter.RoleSessionName : パラメータRoleSessionNameの形式が間違っています。
- 3. 报错:オリジン「本地url」から「上传url」のXMLHttpRequestへのアクセスはCORSポリシーによってブロックされています:プリフライトリクエストへの応答はアクセス制御チェックに合格しません:「Access-Control-Allow-Origin」ヘッダーが存在しません要求されたリソース上で。
- 4.报错:マルチパート アップロード 'xxx' が失敗しました === ConnectionTimeoutError: 60000 ミリ秒の接続タイムアウト
- 5. エラー: OSS でエクスポーズヘッダーの etag を設定してください
- 6. 报错:OperationNotSupportedError: この操作は x-oss-storage-class をサポートしていません。
序文
遭遇した問題
1. NoSuchBucket : 指定されたバケットは存在しません。
この問題は、次のコードを実行すると発生します。
// 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID)
DefaultProfile.addEndpoint("", "", "Sts", ENDPOINT);
// 进行角色授权 构造default profile(参数留空,无需添加region ID)
IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);
// 用profile构造client
DefaultAcsClient client = new DefaultAcsClient(profile);
final AssumeRoleRequest request = new AssumeRoleRequest();
request.setMethod(MethodType.POST);
request.setRoleArn(roleArn); // role-Arn
request.setRoleSessionName(roleSessionName);
request.setDurationSeconds(durationSeconds); // 3600s
// 针对该临时权限可以根据该属性赋予规则,格式为json,没有特殊要求,默认为空
// request.setPolicy(policy); // Optional
final AssumeRoleResponse response = client.getAcsResponse(request);
AssumeRoleResponse.Credentials credentials = response.getCredentials();
final AssumeRoleResponse response = client.getAcsResponse(request);
その後、情報を探していると、あるブロガーが最後に特別に私に思い出させてくれたことを偶然発見しました。
エンドポイントは oss のエンドポイントではなく、sts のエンドポイントです。oss
のエンドポイントを使用すると、「バケットが存在しません」というエラーが報告されます。
補足: sts ドキュメントのリンクを参照: sts アクセス ポイント
2. com.aliyuncs.Exceptions.ClientException: InvalidParameter.RoleSessionName : パラメータRoleSessionNameの形式が間違っています。
その理由は、roleSessionName を空の文字列に設定したためです。
private static final String roleSessionName = "";
への変更:
private static final String roleSessionName = "alice";
このパラメータで指定される公式の例は単なる例であり、空の文字列ではない可能性があります。
3. 报错:オリジン「本地url」から「上传url」のXMLHttpRequestへのアクセスはCORSポリシーによってブロックされています:プリフライトリクエストへの応答はアクセス制御チェックに合格しません:「Access-Control-Allow-Origin」ヘッダーが存在しません要求されたリソース上で。
特定のエラー メッセージのスクリーンショット:
これを初めて見たとき、Alibaba Cloud コンソールのクロスドメイン ルールの設定に問題があるのではないかと思いました。スクリーンショットでは、アップロード方法が PUT になっていたので、すぐに設定ルールを確認しました。案の定、以前のものは GET、POST のみを構成していました。(追記:変換を引き継いだので、元の設定をできるだけ変更せずに、最初にコードから問題を探すことができます)。最後に、Alibaba Cloud のクロスドメイン構成ルールを変更した後、この問題は解決されました。
クロスドメイン構成を構成するには:
① コンソールに「oss」と入力して oss コンソールに入ります;
② バケット リストを開いて任意のバケットをクリックします;
③ [データ セキュリティ ——> クロスドメイン設定] をクリックします;
④ クロスドメイン ルールを追加します:
終わった~
4.报错:マルチパート アップロード 'xxx' が失敗しました === ConnectionTimeoutError: 60000 ミリ秒の接続タイムアウト
ドキュメントには次のように書かれています。
MultipartUpload インターフェイスを使用するときに、ConnectionTimeoutError タイムアウトの問題が発生した場合、ビジネス側はタイムアウト ロジックを独自に処理する必要があります。たとえば、フラグメント サイズを減らしたり、タイムアウト期間を長くしたり、リクエストを再試行したり、ConnectionTimeoutError エラーをキャッチしたりして、タイムアウトを処理します。詳細については、「ネットワーク エラー処理」を参照してください。
この問題に対する私の解決策は、フラグメンテーションを 100MB に設定し、タイムアウト期間を設定することです。
const options = {
// 获取分片上传进度、断点和返回值。
progress: (p, cpt, res) => {
console.log(p);
},
// 设置并发上传的分片数量。
parallel: 4,
// 设置分片大小。默认值为1 MB,最小值为100 KB。
partSize: 1024 * 1024 * 100,
headers,
// 自定义元数据,通过HeadObject接口可以获取Object的元数据。
//meta: { year: 2020, people: "test" },
mime: "text/plain",
timeout: 120000 // 设置超时时间
};
5. エラー: OSS でエクスポーズヘッダーの etag を設定してください
スクリーンショット:
次に、プロンプトに従ってこのヘルプ ドキュメントを表示します: https://help.aliyun.com/document_detail/32069.html
。次に、前提条件の[インストール]
をクリックします。
ここに注意してください:
ETag
x-oss-request-id
x-oss-version-id
6. 报错:OperationNotSupportedError: この操作は x-oss-storage-class をサポートしていません。
スクリーンショットは次のとおりです。
http エラー コードと oss エラーのトラブルシューティングを確認しましたが、このエラーに関する説明は見つかりませんでした。ヘッダー設定時にこの項目の設定があることに気づき、コメントアウトする必要がありました。
元のヘッダー: (公式ドキュメントの例に従って記述)
const headers = {
// 指定该Object被下载时的网页缓存行为。
"Cache-Control": "no-cache",
// 指定该Object被下载时的名称。
//"Content-Disposition": "example.txt",
// 指定该Object被下载时的内容编码格式。
"Content-Encoding": "utf-8",
// 指定过期时间,单位为毫秒。
//Expires: "1000",
"Access-Control-Allow-Origin": "*",
// 指定Object的存储类型。
//"x-oss-storage-class": "Standard",
// 指定Object标签,可同时设置多个标签。
"x-oss-tagging": "Tag1=1&Tag2=2",
// 指定初始化分片上传时是否覆盖同名Object。此处设置为true,表示禁止覆盖同名Object。
"x-oss-forbid-overwrite": "true",
"Content-Type": 'application/x-www-form-urlencoded'
};
このエラーが再度報告されることはありませんが、コメントアウトするのは良い解決策ではないように感じます (笑)。