0

我正在尝试使用自托管的 ServiceStack(单声道版本 4.0.31)创建自己的 S3 兼容服务器,并且我需要支持 s3curl.pl 格式的上传。问题是他们不使用多部分上传,但似乎使用默认的 http 二进制格式。我已经让 ServiceStack 用于多部分/表单数据上传。我还查看了有关相关主题的所有适用帖子,但没有一个对我有用。例如:ServiceStack - 使用流和 Uri 上传文件 看起来可以解决我的问题。问题是我无法为该解决方案解析 RequestContext.Files 。

这是我的 curl 命令行(请注意,Auth 是伪造的,因此不存在安全风险):

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文件上传。

要处理其他文件上传,您可以装饰您的请求 DTO,IRequiresRequestStream它告诉 ServiceStack 跳过反序列化并将原始 InputStream 注入您的 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 回答