我试图从HTTP流直接上传到S3,而不是先存储在内存中或作为文件.我已经使用Rackspace Cloud Files作为HTTP到HTTP进行此操作,但AWS身份验证超出了我的范围,因此我尝试使用SDK.
问题是上传流失败并出现此异常:
"This stream does not support seek operations."
我尝试过,PutObject并且TransferUtility.Upload都失败了同样的事情.
是否有任何方法可以在流进入S3时流入S3,而不是将整个内容缓冲到MemoryStream或FileStream?
或者是否有使用HTTPWebRequest对S3请求进行身份验证的好例子,所以我可以复制我对Cloud Files的处理方式?
编辑: 或者 AWSSDK中是否有帮助函数用于生成授权标头?
码:
这是失败的S3部分(两个方法都包括完整性):
string uri = RSConnection.StorageUrl + "/" + container + "/" + file.SelectSingleNode("name").InnerText;
var req = (HttpWebRequest)WebRequest.Create(uri);
req.Headers.Add("X-Auth-Token", RSConnection.AuthToken);
req.Method = "GET";
using (var resp = req.GetResponse() as HttpWebResponse)
{
using (Stream stream = resp.GetResponseStream())
{
Amazon.S3.Transfer.TransferUtility trans = new Amazon.S3.Transfer.TransferUtility(S3Client);
trans.Upload(stream, config.Element("root").Element("S3BackupBucket").Value, container + file.SelectSingleNode("name").InnerText);
//Use EITHER the above OR the …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ookii对话框生成新的Vista样式文件夹选择对话框.这一切都适用于这个简单的代码:
VistaFolderBrowserDialog dlg = new VistaFolderBrowserDialog();
dlg.SelectedPath = Properties.Settings.Default.StoreFolder;
dlg.ShowNewFolderButton = true;
dlg.ShowDialog();
Run Code Online (Sandbox Code Playgroud)
但是,由于此对象上没有事件,我无法知道用户何时选择文件夹的任何方式.我可以轮询中的变化SelectedPath,但这似乎是一种非常低效的做事方式.
是否有一些我错过的通用C#技巧让我知道用户何时选择了一个文件夹并因此更新了其他字段?