无法将类型为"System.Web.HttpInputStream"的对象强制转换为"System.IO.FileStream"MVC 3

Sna*_*yes 12 c# asp.net-mvc-3

我遇到了关于从HttpInputStream到FileStream的转换类型的问题.

我怎么做的?

我有一个HttpPostedFileBase对象,我想拥有FileStream.

我写:

public void Test(HttpPostedFileBase postedFile) {
  FileStream fileStream = (FileStream)(postedFile.InputStream); // throw exception

  FileStream anotherFileStream = postedFile.InputStream as FileStream; // null
}
Run Code Online (Sandbox Code Playgroud)

我也试过了

public void Test(HttpPostedFileBase postedFile) {
  Stream stream = postedFile.InputStream as Stream;

  FileStream myFile = (FileStream)stream;

}
Run Code Online (Sandbox Code Playgroud)

但没有成功.

为什么要postedFile.InputStreamHttpInputStream型?

我怎么能解决这个问题呢?

谢谢

yar*_*arg 15

public byte[] LoadUploadedFile(HttpPostedFileBase uploadedFile)
{
    var buf = new byte[uploadedFile.InputStream.Length];
    uploadedFile.InputStream.Read(buf, 0, (int)uploadedFile.InputStream.Length);
    return buf;
}
Run Code Online (Sandbox Code Playgroud)


小智 8

从HTTP调用获得的流是只读顺序(不可搜索),FileStream是可读/可搜索的.首先需要将HTTP调用中的整个流读入字节数组,然后从该数组中创建FileStream.

  • 你可以提供一个例子吗? (13认同)

小智 8

我使用了以下内容,它在同样的情况下工作得很好

MemoryStream streamIWant = new MemoryStream();
using (Stream mystream = (Stream)AmazonS3Service.GetObjectStream(AWSAlbumBucketName, ObjectId))                                                            
{
    mystream.CopyTo(streamIWant);
}
return streamIWant;
Run Code Online (Sandbox Code Playgroud)

GetObjectStream返回问题中提到的相同类型的字符串.