我见过关于从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.InputStream
来HttpInputStream
类型?
我怎么能解决这个问题呢?
谢谢
您从HTTP调用得到的流是只读的顺序(非可搜索),并因此FileStream读/写可查找。 您需要首先从HTTP调用整个流读入一个字节数组,然后创建从数组的FileStream。
public byte[] LoadUploadedFile(HttpPostedFileBase uploadedFile)
{
var buf = new byte[uploadedFile.InputStream.Length];
uploadedFile.InputStream.Read(buf, 0, (int)uploadedFile.InputStream.Length);
return buf;
}
我用下面的,它只是正常工作的相同情形
MemoryStream streamIWant = new MemoryStream();
using (Stream mystream = (Stream)AmazonS3Service.GetObjectStream(AWSAlbumBucketName, ObjectId))
{
mystream.CopyTo(streamIWant);
}
return streamIWant;
该GetObjectStream返回在问题中提到的相同类型的字符串。
您可以使用.SaveAs
方法来保存文件的内容。 HttpInputSteam
可能是因为它是通过http上传[浏览器]
postedFile.SaveAs("Full Path to file name");
您还可以使用CopyTo
FileStream f = new FileStream(fullPath, FileMode.CreateNew);
postedFile.InputStream.CopyTo(f);
f.Close();
下面的代码为我工作..
使用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