如何从 HttpPostedFile InputStream 属性 中读取正确的 Stream/byte[]?
How do I read the correct Stream/byte[] from HttpPostedFile InputStream property?
我得到一个正在上传的 HttpPostedFile
(应该是 pdf),我必须使用它的 stream
在 PdfSharp 中初始化它。
问题是,虽然 HttpPostedFile
SaveAs()
方法保存了一个有效的 pdf,但保存它的 InputStream
并没有创建一个有效的 pdf,所以当我使用 InputStream
在 PdfSharp 上读取 pdf 时会抛出“无效 Pdf”异常,并保存 InputStream
字节 []
我试图得到这样的:
public byte[] GetBytesFromStream(System.IO.Stream uploadedFile)
{
int length = Convert.ToInt32(uploadedFile.Length); //Length: 103050706
string str = "";
byte[] input = new byte[length];
// Initialize the stream.
System.IO.Stream MyStream = uploadedFile;
// Read the file into the byte array.
MyStream.Read(input, 0, length);
return input;
}
调用方法如下:
byte[] fileBytes = GetBytesFromStream(uploadedFile.InputStream);
但是从这些字节创建文件也会创建无效的 pdf...
我从这样的字节创建文件...
System.IO.File.WriteAllBytes("Foo.pdf", fileBytes);
那么我有 2 个问题:
1st - 为什么我从 InputStream 接收到的流无效,而 SaveAs 有效。
第 2 - 如何从 inputStream 或 HttpPostedFile 获取正确的流,而不将文件保存到磁盘然后读取它。
注意到这个问题没有得到回答(因为 Evk 的评论是解决方案),我不能接受任何答案。
所以我做这个只是为了不让这个问题得不到解答。
tl;博士;
根据 Evk 的评论,解决方案是流的位置,它被预先读取并在尝试创建 pdf 之前将位置设置为 0 足以解决问题。
我得到一个正在上传的 HttpPostedFile
(应该是 pdf),我必须使用它的 stream
在 PdfSharp 中初始化它。
问题是,虽然 HttpPostedFile
SaveAs()
方法保存了一个有效的 pdf,但保存它的 InputStream
并没有创建一个有效的 pdf,所以当我使用 InputStream
在 PdfSharp 上读取 pdf 时会抛出“无效 Pdf”异常,并保存 InputStream
字节 []
我试图得到这样的:
public byte[] GetBytesFromStream(System.IO.Stream uploadedFile)
{
int length = Convert.ToInt32(uploadedFile.Length); //Length: 103050706
string str = "";
byte[] input = new byte[length];
// Initialize the stream.
System.IO.Stream MyStream = uploadedFile;
// Read the file into the byte array.
MyStream.Read(input, 0, length);
return input;
}
调用方法如下:
byte[] fileBytes = GetBytesFromStream(uploadedFile.InputStream);
但是从这些字节创建文件也会创建无效的 pdf...
我从这样的字节创建文件...
System.IO.File.WriteAllBytes("Foo.pdf", fileBytes);
那么我有 2 个问题:
1st - 为什么我从 InputStream 接收到的流无效,而 SaveAs 有效。
第 2 - 如何从 inputStream 或 HttpPostedFile 获取正确的流,而不将文件保存到磁盘然后读取它。
注意到这个问题没有得到回答(因为 Evk 的评论是解决方案),我不能接受任何答案。
所以我做这个只是为了不让这个问题得不到解答。
tl;博士; 根据 Evk 的评论,解决方案是流的位置,它被预先读取并在尝试创建 pdf 之前将位置设置为 0 足以解决问题。