我正在尝试使用自托管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
答案 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);
}
//...
}
}
中有所描述