无法投射型“System.Web.HttpInputStream”的目的为类型“System.IO.

2019-08-02 02:21发布

我见过关于从HttpInputStream到的FileStream铸造类型的问题。

我怎么做?

我有一个HttpPostedFileBase对象,我想拥有的FileStream。

我写:

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

  FileStream anotherFileStream = postedFile.InputStream as FileStream; // null
}

我也试过

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

  FileStream myFile = (FileStream)stream;

}

但没有成功。

为什么在postedFile.InputStreamHttpInputStream类型?

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

谢谢

Answer 1:

您从HTTP调用得到的流是只读的顺序(非可搜索),并因此FileStream读/写可查找。 您需要首先从HTTP调用整个流读入一个字节数组,然后创建从数组的FileStream。



Answer 2:

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


Answer 3:

我用下面的,它只是正常工作的相同情形

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

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



Answer 4:

您可以使用.SaveAs方法来保存文件的内容。 HttpInputSteam可能是因为它是通过http上传[浏览器]

 postedFile.SaveAs("Full Path to file name");

您还可以使用CopyTo

FileStream f = new FileStream(fullPath, FileMode.CreateNew);
postedFile.InputStream.CopyTo(f);
f.Close();


Answer 5:

下面的代码为我工作..

使用BinaryReader在对象从像流返回一个字节数组:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

如何从HttpPostedFile创建字节数组



文章来源: Unable to cast object of type 'System.Web.HttpInputStream' to type 'System.IO.FileStream' MVC 3