HttpPostedFileBase.InputStream 投射到流静默失败
HttpPostedFileBase.InputStream Cast to Stream Silently Fails
我刚开始使用流,很难将文本文件从 Web 应用程序上传到 AWS。具体来说,将 HttpPostedFileBase.InputStream 强制转换为 (Stream) 不会引发错误,但生成的 Stream 不包含任何数据,即使它通过了空检查,因此上传 "works" 但始终会导致空白文本文档。我在搜索 SO 时找不到这个问题,代码是从 AWS SDK 示例中复制的,并且输入流已被复制到起始位置设置为零的 MemoryStream,所以我在这里走到了死胡同.有谁知道为什么这不起作用以及如何解决?提前致谢!
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1))
{
Stream saveableStream = new MemoryStream();
using (Stream source = (Stream)UploadedHttpFileBase.InputStream)
{
source.Position = 0;
source.CopyTo(saveableStream);//Results in no data!
}
saveableStream.Position = 0;
//Save File to Bucket
try
{
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketLocation,
Key = UploadedHttpFileBase.FileName,
InputStream = saveableStream
};
PutObjectResponse response = client.PutObject(request);
}
catch (Exception e)
{
e.Message.ToString();
}
}
这里的答案与嵌套有关,与发布的代码没有内在的关系。我不完全确定流是如何工作的,但在问题方法的开头有一个 StreamReader 检查初始 ReadLine 的值以了解是否保存。当我将这个问题的代码从执行 ReadLines 的 while 循环中移出时,上传成功了。在不需要问题中的嵌套 Stream 或 MemoryStream 的情况下重新组织验证后,一切都按预期进行。
我刚开始使用流,很难将文本文件从 Web 应用程序上传到 AWS。具体来说,将 HttpPostedFileBase.InputStream 强制转换为 (Stream) 不会引发错误,但生成的 Stream 不包含任何数据,即使它通过了空检查,因此上传 "works" 但始终会导致空白文本文档。我在搜索 SO 时找不到这个问题,代码是从 AWS SDK 示例中复制的,并且输入流已被复制到起始位置设置为零的 MemoryStream,所以我在这里走到了死胡同.有谁知道为什么这不起作用以及如何解决?提前致谢!
using (var client = new AmazonS3Client(Amazon.RegionEndpoint.USWest1))
{
Stream saveableStream = new MemoryStream();
using (Stream source = (Stream)UploadedHttpFileBase.InputStream)
{
source.Position = 0;
source.CopyTo(saveableStream);//Results in no data!
}
saveableStream.Position = 0;
//Save File to Bucket
try
{
PutObjectRequest request = new PutObjectRequest
{
BucketName = bucketLocation,
Key = UploadedHttpFileBase.FileName,
InputStream = saveableStream
};
PutObjectResponse response = client.PutObject(request);
}
catch (Exception e)
{
e.Message.ToString();
}
}
这里的答案与嵌套有关,与发布的代码没有内在的关系。我不完全确定流是如何工作的,但在问题方法的开头有一个 StreamReader 检查初始 ReadLine 的值以了解是否保存。当我将这个问题的代码从执行 ReadLines 的 while 循环中移出时,上传成功了。在不需要问题中的嵌套 Stream 或 MemoryStream 的情况下重新组织验证后,一切都按预期进行。