3

次のコードがS3で0バイトのファイルになり、エラーメッセージが表示されないバグを修正しようとしています。

このコードは、画像と目的の画像パス(データベースラッパーオブジェクトから)を含むストリーム(名前の悪いFileUpload4から)をAmazonのS3にフィードしますが、ファイル自体はアップロードされません。

CloudUtils.UploadAssetToCloud(FileUpload4.FileContent, ((ImageContent)auxSRC.Content).PhysicalLocationUrl);
ContentWrapper.SaveOrUpdateAuxiliarySalesRoleContent(auxSRC);

2行目は、(おそらく)アップロードされた画像に関する情報を格納するデータベースオブジェクトを保存するだけです。この保存は完了しており、上記の行がエラーなしで実行されていることを示しています。

上記の最初の行は、適切なバケット名を取得した後、このメソッドを呼び出します。

public static bool UploadAssetToCloud(Stream asset, string path, string bucketName, AssetSecurity security = AssetSecurity.PublicRead)
{
    TransferUtility txferUtil;
    S3CannedACL ACL = GetS3ACL(security);

    using (txferUtil = new Amazon.S3.Transfer.TransferUtility(AWSKEY, AWSSECRETKEY))
    {
        TransferUtilityUploadRequest request = new TransferUtilityUploadRequest()
            .WithBucketName(bucketName)
            .WithTimeout(TWO_MINUTES)
            .WithCannedACL(ACL)
            .WithKey(path);
        request.InputStream = asset;
        txferUtil.Upload(request);
    }

    return true;
}

ストリームが適切なストリームであることを確認しました-アクセス許可があり、バケットが存在し、パスが正常である他の場所に保存できます(ファイルはS3の宛先で作成され、データが入力されないだけです)ストリームのコンテンツ)。私は私の知恵の終わりに近づいています、ここで-私は何が欠けていますか?

編集:私の同僚の1人は、FileUploadのPostedFileプロパティの方が良いと指摘しました。代わりに、私は今、そのストリームを引き出しています。それはまだ機能していません。

4

2 に答える 2

3

ストリームは正しく配置されていますか? asset.Position をチェックして、位置がストリームの先頭に設定されていることを確認します。

asset.Seek(0, SeekOrigin.Begin);

編集

わかりました、さらに推測します(ただし、推測にすぎません):(これはすべて、着信ストリームから「手動で」問題なく読み取ることができることを前提としています)

  1. テストのためだけに、TransferUtility で単純な Upload メソッドの 1 つを試してみてください。おそらく、ファイル パス文字列を受け取るだけのメソッドです。それが機能する場合は、UploadRequest オブジェクトに設定する追加のプロパティがある可能性があります。

  2. UploadProgressEvent を UploadRequest オブジェクトにフックすると、何がうまくいかないかについての手がかりが得られますか?

  3. UploadRequest の API には、InputStream プロパティと WithInputStream 流暢な API の両方が含まれていることに気付きました。InputStream の設定にバグがあるのではないでしょうか? 代わりに .WithInputStream API を使用してみてください

于 2012-12-03T19:06:47.647 に答える
0

どのストリームを使用していますか?使用しているストリームは、mark()およびreset()メソッドをサポートしていますか。

アップロード方法が最初に特定のストリームのMD5を計算してからアップロードしている間である可能性があります。したがって、ストリームがこれら2つの方法をサポートしていない場合、MD5計算時に、eofに到達し、ストリームがアップロードするための事前配置ができなくなります。物体。

于 2012-11-30T06:35:19.927 に答える