Comment puis-je obtenir un Flux d'Entrée de HSSFWorkbook Objet
Je veux que mon application web aux utilisateurs de télécharger des données dans un fichier Excel.
J'ai la fonction suivante pour envoyer un Flux d'Entrée dans la réponse de l'objet.
public static void sendFile(InputStream is, HttpServletResponse response) throws IOException {
BufferedInputStream in = null;
try {
int count;
byte[] buffer = new byte[BUFFER_SIZE];
in = new BufferedInputStream(is);
ServletOutputStream out = response.getOutputStream();
while(-1 != (count = in.read(buffer)))
out.write(buffer, 0, count);
out.flush();
} catch (IOException ioe) {
System.err.println("IOException in Download::sendFile");
ioe.printStackTrace();
} finally {
if (in != null) {
try { in.close();
} catch (IOException ioe) { ioe.printStackTrace(); }
}
}
}
Je voudrais transformer mon HSSFWorkbook Objet d'un flux d'entrée et de passer à la méthode précédente.
public InputStream generateApplicationsExcel() {
HSSFWorkbook wb = new HSSFWorkbook();
//Populate the excel object
return null; //TODO. return the wb as InputStream
}
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFWorkbook.html
OriginalL'auteur Sergio del Amo | 2008-12-18
Vous devez vous connecter pour publier un commentaire.
Le problème avec votre question, c'est que vous êtes le mélange OutputStreams et InputStreams. Un InputStream est quelque chose de vous lire et d'un OutputStream est quelque chose que vous écrivez.
C'est la façon dont j'écris un PI objet pour le flux de sortie.
Si vous voulais réutiliser votre code existant que vous avez à stocker les données POI quelque part, puis le transformer en un flux d'entrée. Ce serait facile à faire par écrit à un ByteArrayOutputStream, puis la lecture de ces deux octets à l'aide d'un ByteArrayInputStream, mais je ne le recommande pas. Votre méthode serait plus utile en tant que générique de Tuyau de mise en œuvre, où vous pouvez transférer les données à partir d'un InputStream et OutputStream, mais vous n'en avez pas besoin pour l'écriture de POI objets.
Content-Length
Je pense que si tu voulais un contenu en-tête de longueur, vous devrez écrire le flux à un ByteArrayOutputStream d'abord, puis obtenir sa longueur, puis les écrire dans la réponse HTTP.
OriginalL'auteur Mr. Shiny and New 安宇
vous pouvez créer un InputStream à partir d'un objet.
OriginalL'auteur Xiong xiao Luo
Je pense que je comprends ce que vous essayez de le faire (peut-être que je suis se posant avant, tout de même)
vous n'avez pas vraiment besoin de beaucoup plus de code - découvrez la méthode d'écriture -
Aussi loin que je me souviens quand j'ai travaillé w/PI c'est ce que j'ai fait. Si vous êtes à l'intérieur d'un framework web, vous pourriez avoir à finaggle en sorte que le cadre n'a pas essayer de faire quelque chose avec la ServletOutputStream après que vous avez fermé. Si elle tente, vous aurez une exception à jeter pour vous dire que le flux de sortie est déjà fermé.
OriginalL'auteur lucas