0

自己ホスト型の ServiceStack (mono でバージョン 4.0.31) を使用して独自の S3 互換サーバーを作成しようとしていますが、s3curl.pl 形式のアップロードをサポートする必要があります。問題は、マルチパート アップロードを使用せず、デフォルトの http バイナリ形式を使用しているように見えることです。multipart/form-data アップロード用に ServiceStack を既に使用しています。関連トピックに関する該当するすべての投稿も確認しましたが、どれもうまくいきません。例: ServiceStack - ストリームと Uri を使用してファイルをアップロードすると 、問題が解決されるように見えました。問題は、そのソリューションの RequestContext.Files を解決できないことです。

これが私のcurlコマンドラインです(認証は偽物であるため、セキュリティリスクではないことに注意してください):

curl -H 'Date: Thu, 09 Oct 2014 16:56:21 +0000' -H 'Authorization: AWS Y29tZXQ=:ciitxdxRvWrlcVsc48JnXqKu/oY=' -L -H 'content-type: ' -T README.txt 'http://localhost:1301/s3/README.txt?format=xml' -k
4

1 に答える 1

1

base.Request.FilesAPI は、HTTPmultipart/form-dataファイルのアップロードを処理するためだけのものです。

他のファイル アップロードを処理するIRequiresRequestStreamには、ServiceStack にデシリアライゼーションをスキップし、代わりに生の InputStream を DTO に挿入するように指示する Request DTO を装飾できます。

public class RawFileUpload : IRequiresRequestStream
{
    public Stream RequestStream { get; set; }
}

あなたのサービスでは、あなたが扱うことができます

public class UploadServices : Service
{
    public object Any(RawFileUpload request)
    {
        var filePath = "~/uploads/{0}".Fmt(Guid.NewGuid().ToString("n"))
                       .MapAbsolutePath();
        using (var fs = File.OpenWrite(filePath))
        {
            request.RequestStream.WriteTo(fs);
        }
        //...
    }
}

この機能については、シリアライゼーション/デシリアライゼーション wikiで説明されています。

于 2014-10-09T20:17:03.693 に答える