ServiceStack - 将文件上传为字节流?

时间:2014-10-09 19:19:42

标签: http servicestack http-upload

我正在尝试使用自托管ServiceStack(单声道版本4.0.31)创建自己的S3兼容服务器,我需要支持s3curl.pl格式上传。问题是他们不使用多部分上传,但似乎使用默认的http二进制格式。我已经有ServiceStack用于多部分/表单数据上传。我还查看了相关主题的所有适用帖子,但没有一个适合我。例如:ServiceStack - Upload files with stream and with 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

1 个答案:

答案 0 :(得分:1)

base.Request.Files API仅用于处理HTTP multipart/form-data文件上传。

要处理其他文件上传,您可以使用IRequiresRequestStream修饰Request DTO,告诉ServiceStack跳过反序列化并将Raw 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);
        }
        //...
    }
}

此功能在Serialization/Deserialization wiki

中有所描述