【问题标题】:HttpPostedFileBase.InputStream Cast to Stream Silently FailsHttpPostedFileBase.InputStream 转换为流静默失败
【发布时间】:2016-04-20 04:57:19
【问题描述】:

我是使用流的新手,并且在将文本文件从 Web 应用程序上传到 AWS 时遇到困难。具体来说,将 HttpPostedFileBase.InputStream 强制转换为 (Stream) 不会引发错误,但即使通过了 null 检查,生成的 Stream 也不包含任何数据,因此上传“有效”但总是导致空白文本文档。我在搜索 SO 时找不到这个问题,代码是从 AWS 开发工具包示例中复制的,并且输入流已被复制到 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();
    }
}

【问题讨论】:

    标签: c# .net amazon-web-services aws-sdk httppostedfilebase


    【解决方案1】:

    这里的答案与嵌套有关,与发布的代码本质上无关。我不完全确定流是如何工作的,但是在问题方法的开头有一个 StreamReader 检查初始 ReadLine 的值以了解是否保存。当我将这个问题的代码从执行 ReadLines 的 while 循环中移出时,上传工作。在重新组织验证而不需要问题中的嵌套 Stream 或 MemoryStream 之后,一切都按预期工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 2011-07-26
      • 1970-01-01
      • 2017-01-10
      • 2018-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多