2016-04-14 3 views
0

Ich benutze the library MPXJ die funktioniert gut, aber ich möchte jetzt die Möglichkeit für Benutzer, ihre eigene Datei (asp.net-mvc-Site) hochladen und es kommt auf der Server-Seite Formular als HttpPostedFileBase und ich dann in einen Speicher konvertieren streamen mit:Kann die C# -Bibliothek MPXJ eine Datei von einem MemoryStream einlesen?

var stream = new MemoryStream(); 
    httpPostedFile.InputStream.CopyTo(stream); 

da, ich versuche, herauszufinden, wie ich es in als Memory lesen kann (im Vergleich zu einem Speicherort auf der Festplatte)

im Moment habe ich so etwas wie diese:

public ProjectFile Import(string filePathandName) 
    { 
     MPPReader reader = new MPPReader(); 
     ProjectFile project = reader.read(filePathandName); 

und Ich wollte so etwas haben:

public ProjectFile Import(MemoryStream stream) 
    { 
     MPPReader reader = new MPPReader(); 
     ProjectFile project = reader.read(stream); 

Ist das möglich „nativ“ oder muß ich die Datei auf meinem Server speichern und dann in von dort lesen (versuchen, diese Option zu vermeiden)?

Antwort

1

Die MPPReader.Read() Methode akzeptiert nur 4 Arten von Parametern, von denen keine eine MemoryStream und alle bis auf einen scheinen Typen zu sein, die in der Bibliothek selbst definiert sind:

  • java.io.File
  • java.io.InputStream
  • org.apache.poi.poifs.filesystem.POIFSFileSystem
  • String

Sie sind zur Zeit der string Parameter, da es einen Weg erwartet, aber es ist in der Nähe scheint, dass Sie in der Bibliothek gefunden vielleicht bekommen würde, zu versuchen, Ihr bestehendes MemoryStream Objekt an den InputStream Typen zu kopieren und das verwenden (wenn diese Art der Unterstützung existiert).

1

MPXJ Schiffe mit einem Paar von Klassen DotNetInputStream und DotNetOutputStream genannt, die als Wrapper handeln um .Net so Ströme, die sie verwendet werden können, wo MPXJ erwartet Java InputStream oder OutputStream. Hier

ist der entsprechende Kommentar von 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> 

Sie sollten in der Lage, diese Klasse zu verwenden, um zu erreichen, was Sie in Ihrer Frage beschreiben.

Verwandte Themen