bugfix> c# > 投稿

次のコードを使用してIBM Cloud Object Storage(ICOS)にアップロードしようとしましたが、一部のファイルをアップロードできませんでした。 失敗したファイルには、ファイル名に記号「[」または「]」が含まれています。

TransferUtility Utl = new TransferUtility(objClient);
TransferUtilityUploadDirectoryRequest request = new   TransferUtilityUploadDirectoryRequest
{
    BucketName = "Correct Backet name"
    Directory = "Correct directory name" ex. "C:\\testd1\\testd2"
    KeyPrefix = "Correct prefix"
    SearchOption = SearchOption.AllDirectories,
    SearchPattern = "*.*"
};
Utl.UploadDirectory(request);


Language:.NET C#

API:AWSSDK.Core 3.3.22.5、AWSSDK.S3 3.3.18.2

例外名:Amazon.S3.AmazonS3Exception
メッセージ:「無効な引数」

InnerException名:Amazon.Runtime.Internal.HttpErrorResponseException
メッセージ:「リモートサーバーからエラーが返されました:(400)Bad Request」

「test.txt」などの通常の名前のファイルは問題なくアップロードできます。
この現象は、AWS S3または別のS3互換ストレージサービスでは発生しません。
(ただし、他のS3互換サービスの1つだけを試しました...)

なぜICOSにアップロードできないのか、どのような解決策があるのか​​教えてください

よろしく。

回答 2 件
  • これは、AWSが公開された制限を厳密に実施していない場合のようです。 AWS S3のドキュメントによれば、「すべてのアプリケーションで一貫性を保つための重要な特別な処理のため、キー名に次の文字を使用しないでください。」

    バックスラッシュ( "\")

    左中括弧( "{")

    印刷できないASCII文字(10進数で128〜255文字)

    キャレット( "^")

    右中括弧( "}")

    パーセント文字( "%")

    グレイヴアクセント/バックティック( "` ")

    右角かっこ( "]")

    引用符

    「より大きい」記号( ">")

    左角かっこ( "[")

    ティルド( "〜")

    「より小さい」記号( "<")

    「ポンド」文字( "#")

    垂直バー/パイプ( "|")

    URLエンコード( [object-key]  -> %5Bobject-key%5D )すべて正常です。ザ・ UrlEncode(string)   HttpUtility からのメソッド  クラスが役立つ場合があります(ドキュメント)。

  • アドバイスをありがとう。

    次のことをしたい:
    -アップロードソースファイルの名前には記号「[」と「]」が含まれていますが、ファイル名を変更したくありません。
    ただし、アップロードされた宛先ファイル名(=オブジェクトキー?)は変更できます。
    -「UploadDirectory」メソッドを使用してファイルをアップロードしたい。

    バケットに作成するオブジェクトのキー名を指定して、「UploadDirectory」メソッドでアップロードする方法を検索しました。 しかし、私は良い方法で到着しませんでした。

    「UploadDirectory」メソッドを使用して、作成するオブジェクトのキー名を指定できないと思います。 (したがって、エンコードはできないと思います。)

    ICOSでは、「UploadDirectory」メソッドを使用してファイル名に「[」または「]」を含むファイルをアップロードすることはできませんか?

あなたの答え