14

我遇到了一个关于从 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;

}

但没有成功。

为什么 at postedFile.InputStreamcome HttpInputStreamtype ?

我该如何解决这个问题?

谢谢

4

6 回答 6

18
public byte[] LoadUploadedFile(HttpPostedFileBase uploadedFile)
{
    var buf = new byte[uploadedFile.InputStream.Length];
    uploadedFile.InputStream.Read(buf, 0, (int)uploadedFile.InputStream.Length);
    return buf;
}
于 2013-05-24T16:05:56.197 回答
11

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

于 2012-10-29T10:37:19.667 回答
9

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

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

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

于 2014-02-20T03:44:36.003 回答
1

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

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

你也可以使用CopyTo

FileStream f = new FileStream(fullPath, FileMode.CreateNew);
postedFile.InputStream.CopyTo(f);
f.Close();
于 2012-10-29T10:36:17.373 回答
0

下面的代码对我有用..

使用 BinaryReader 对象从流中返回一个字节数组,例如:

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

如何从 HttpPostedFile 创建字节数组

于 2017-06-21T12:35:52.200 回答
0

它会为你工作。IFormFile 文件;

        if (file != null)
        {
            byte[]? image = Array.Empty<byte>();
            await using var memoryStream = new MemoryStream();
            await file!.CopyToAsync(memoryStream);
            image = memoryStream.ToArray();
        }
于 2021-09-03T07:56:02.457 回答