2017-03-01 12 views
0

広く知られているvbsスクリプトは、REST APIを使用してWindowsサーバーからAmazon S3にファイルを転送するために配布されています。 REST APIにはファイルの削除操作も含まれていますが、どこでも作業スクリプトは見られませんでした。私自身の謙虚な取り組みは失敗しました。REST APIを使用してvbsスクリプトからS3オブジェクトを削除する方法

この作品(オペレーション、部分的なコードを置く):

... 
StringToSign = Replace("PUT\n\napplication/octet-stream\n\nx-amz-date:" & gmtDateStr & "\n/"& AWS_BUCKETNAME & sRemoteFilePath, "\n", vbLf) 
... 
With CreateObject("Microsoft.XMLHTTP") 
.open "PUT", AWSBucketUrl & sRemoteFilePath, False 
... 

これは動作しません:

... 
StringToSign = Replace("DELETE\n\ntext/plain\n\nx-amz-date:" & gmtDateStr & "\n/"& AWS_BUCKETNAME & sRemoteFilePath, "\n", vbLf) 
... 
With CreateObject("Microsoft.XMLHTTP") 
.open "DELETE", AWSBucketUrl & sRemoteFilePath, False 
... 

エラーが返さ「SignatureDoesNotMatchである - 我々は計算要求の署名が一致しません。あなたが提供した署名。あなたの鍵と署名方法を確認してください。 put操作が正常に動作するので、キーと署名メソッドにエラーがないようです。おそらく、試みられた削除コードのStringToSignは正しくありません。

誰もこの種の仕事をしたことがありますか、またはコードに誤りがありますか?

+0

'PUT'の例に渡されたものと比べて、' StringToSign'のMIMEタイプが間違っているようです。なぜそれは 'text/plain'ですか? – Lankymart

答えて

0

コンテンツを送信していないため、ヘッダーをDELETEリクエストに入れないでください。

Content-Typeヘッダーがないので、署名する文字列にこの要素を空の文字列に設定したままにします。 \nはそのままの状態にしておきます。

+0

S3ドキュメントはあいまいです。http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectDELETE.html 構文ブロックにはContent-Typeが含まれません.BudにはContent-Lengthが含まれています。次に、ページの下側のサンプル要求にはContent-Typeは含まれていますが、Content-Lengthは含まれていません。バージョン管理のサンプルリクエストには、両方が含まれています。ヘッドスピン。 – user1207313

+0

ああ!エラーメッセージにターゲット文字列が表示されている場合、問題は次のとおりです。削除要求の文字列から記号への挿入要求に含まれていた「x-amz-date:」が省略されます。私はそれを削除すると、それは動作します。日付自体は依然として必要です。 – user1207313

+0

削除されたコメントを置き換える:感謝、マイケル - あなたの提案は妥当であり、S3 xmlエラーメッセージの項目が実際にターゲット文字列であった私が提出したものを戻す)。 "text/plain"は実際にそこにあります。 ' text/plainの 水、2017年3月1日をDELETE 夜7時23分13秒UTC /バケット/フォルダ/ファイル' – user1207313

関連する問題