HttpPostedFileBase.InputStream转换为流静默失败

时间:2016-04-19 17:12:53

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

我刚开始使用流式处理器,并且无法将文本文件从Web应用程序上传到AWS。具体来说,HttpPostedFileBase.InputStream到(Stream)的强制转换不会抛出错误,但是生成的Stream即使通过空检查也不包含任何数据,因此上传“有效”但总是会生成空白文本文档。我在搜索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();
    }
}

1 个答案:

答案 0 :(得分:0)

这里的答案与嵌套有关,并且与发布的代码没有任何内在联系。我不完全确定流是如何工作的,但是在问题开始时有一个StreamReader检查初始ReadLine的值以了解是否保存。当我将这个问题的代码从执行ReadLines的while循环中移出时,上传工作正常。重新组织验证后,不需要在问题中使用嵌套的Stream或MemoryStream,一切都按照它应该的那样工作。