C# 库 MPXJ 是否能够从 MemoryStream 中读取文件?
Is the C# library MPXJ able to read in a file from a MemoryStream?
我正在使用 the library MPXJ,效果很好,但我现在希望用户能够上传自己的文件(asp.net-mvc 站点),它以服务器端形式出现 post 作为 HttpPostedFileBase 然后我使用以下方法转换为内存流:
var stream = new MemoryStream();
httpPostedFile.InputStream.CopyTo(stream);
鉴于此,我正在尝试弄清楚如何将它作为 MemoryStream 读取(相对于磁盘上的文件位置)
现在我有这样的东西:
public ProjectFile Import(string filePathandName)
{
MPPReader reader = new MPPReader();
ProjectFile project = reader.read(filePathandName);
我想要这样的东西:
public ProjectFile Import(MemoryStream stream)
{
MPPReader reader = new MPPReader();
ProjectFile project = reader.read(stream);
这可能吗"natively" 还是我需要将文件保存在我的服务器上然后从那里读取(尽量避免该选项)?
MPPReader.Read()
方法只接受 4 种类型的参数,none 其中是 MemoryStream
,除了一种似乎是库本身定义的类型:
- java.io.File
- java.io.InputStream
- org.apache.poi.poifs.filesystem.POIFSFileSystem
- 字符串
您目前正在使用 string
参数,因为它需要一个路径,但是您可能得到的最接近的方法似乎是尝试将现有的 MemoryStream
对象复制到 InputStream
在库中找到类型并使用它(如果存在该类型的支持)。
MPXJ 附带一对 classes,称为 DotNetInputStream
和 DotNetOutputStream
,它们充当 .Net 流的包装器,以便它们可以在 MPXJ 期望的地方使用 Java InputStream
或 OutputStream
.
这里是来自DotNetInputStream
的相关评论:
/// <summary>
/// Implements a wrapper around a .Net stream allowing it to be used with MPXJ
/// where a Java InputStream is expected.
/// This code is based on DotNetInputStream.java from the Saxon project http://www.sf.net/projects/saxon
/// Note that I've provided this class as a convenience so there are a matching pair of
/// input/output stream wrapper shopped with MPXJ. IKVM also ships with an input stream wrapper:
/// ikvm.io.InputStreamWrapper, which you could use instead of this one.
/// </summary>
您应该能够使用这个 class 来实现您在问题中描述的内容。
我正在使用 the library MPXJ,效果很好,但我现在希望用户能够上传自己的文件(asp.net-mvc 站点),它以服务器端形式出现 post 作为 HttpPostedFileBase 然后我使用以下方法转换为内存流:
var stream = new MemoryStream();
httpPostedFile.InputStream.CopyTo(stream);
鉴于此,我正在尝试弄清楚如何将它作为 MemoryStream 读取(相对于磁盘上的文件位置)
现在我有这样的东西:
public ProjectFile Import(string filePathandName)
{
MPPReader reader = new MPPReader();
ProjectFile project = reader.read(filePathandName);
我想要这样的东西:
public ProjectFile Import(MemoryStream stream)
{
MPPReader reader = new MPPReader();
ProjectFile project = reader.read(stream);
这可能吗"natively" 还是我需要将文件保存在我的服务器上然后从那里读取(尽量避免该选项)?
MPPReader.Read()
方法只接受 4 种类型的参数,none 其中是 MemoryStream
,除了一种似乎是库本身定义的类型:
- java.io.File
- java.io.InputStream
- org.apache.poi.poifs.filesystem.POIFSFileSystem
- 字符串
您目前正在使用 string
参数,因为它需要一个路径,但是您可能得到的最接近的方法似乎是尝试将现有的 MemoryStream
对象复制到 InputStream
在库中找到类型并使用它(如果存在该类型的支持)。
MPXJ 附带一对 classes,称为 DotNetInputStream
和 DotNetOutputStream
,它们充当 .Net 流的包装器,以便它们可以在 MPXJ 期望的地方使用 Java InputStream
或 OutputStream
.
这里是来自DotNetInputStream
的相关评论:
/// <summary>
/// Implements a wrapper around a .Net stream allowing it to be used with MPXJ
/// where a Java InputStream is expected.
/// This code is based on DotNetInputStream.java from the Saxon project http://www.sf.net/projects/saxon
/// Note that I've provided this class as a convenience so there are a matching pair of
/// input/output stream wrapper shopped with MPXJ. IKVM also ships with an input stream wrapper:
/// ikvm.io.InputStreamWrapper, which you could use instead of this one.
/// </summary>
您应该能够使用这个 class 来实现您在问题中描述的内容。