Bonjour,
Je travaille actuellement sous Websphere Portal 5.1 et je fais un portlet qui suit le framework Struts.
Voilà mon problème, j'ai sous le Web Content Management du server enregistré des images et documents divers. Je n'arrive pas à utiliser l'API WCM pour générer des liens vers ces documents alors je refais le monde. J'essaye donc d'envoyer les données du documents dans une page du navigateur avec l'entête correspondante (le genre de choses qui fonctionne très facilement en php)
Voici mon code
public ActionForward execute (ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception {
String documentIdString=request.getParameter("id");
Workspace ws=Outils.getWorkspace(request);
try{
DocumentId id=ws.createDocumentId(documentIdString);
if (documentIdString.indexOf("LibraryImageComponent")>-1){
LibraryImageComponent document=(LibraryImageComponent) ws.getById(id);
if (document!=null){
genereFile(document, response);
}
} else if (documentIdString.indexOf("LibraryFileComponent")>-1){
LibraryFileComponent document=(LibraryFileComponent) ws.getById(id);
if (document!=null){
genereFile(document, response);
}
}
} catch (Throwable t){
//t.printStackTrace();
}
return null;
}
public void genereFile(byte[] data, String fileName, HttpServletResponse response){
System.err.println("genereFile(..., "+fileName+", "+response+")");
String extension=null;
String contentType=null;
if (data!=null && fileName!=null){
int posPoint=fileName.lastIndexOf('.');
extension=fileName.substring(posPoint+1).toLowerCase();
if (extension.equals("asf")) contentType="video/x-ms-asf";
else if (extension.equals("avi")) contentType="video/avi";
else if (extension.equals("doc")) contentType="application/msword";
else if (extension.equals("zip")) contentType="application/zip";
else if (extension.equals("xls")) contentType="application/vnd.ms-excel";
else if (extension.equals("gif")) contentType="image/gif";
else if (extension.equals("jpg")) contentType="image/jpeg";
else if (extension.equals("jpeg")) contentType="image/jpeg";
else if (extension.equals("wav")) contentType="audio/wav";
else if (extension.equals("mp3")) contentType="audio/mpeg3";
else if (extension.equals("mpg")) contentType="video/mpeg";
else if (extension.equals("mpeg")) contentType="video/mpeg";
else if (extension.equals("rtf")) contentType="application/rtf";
else if (extension.equals("htm")) contentType="text/html";
else if (extension.equals("html")) contentType="text/html";
else if (extension.equals("asp")) contentType="text/asp";
else contentType="application/octet-stream";
response.reset();
response.setContentType(contentType);
response.setContentLength(data.length);
OutputStream os;
try {
os = response.getOutputStream();
System.err.print("response="+response+", os = "+os+", data=");
System.err.println(data+", extension="+extension+", contentType="+contentType);
if (os!=null){
os.write(data);
os.flush();
os.close();
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}
public void genereFile(LibraryFileComponent file, HttpServletResponse response){
System.err.println("genereFile("+file+", "+response+")");
byte[] data=null;
String fileName=null;
if (file!=null){
try {
System.err.println("file!=null");
data = file.getFile();
fileName=file.getFileName();
genereFile(data, fileName, response);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
public void genereFile(LibraryImageComponent file, HttpServletResponse response){
System.err.println("genereFile("+file+", "+response+")");
byte[] data=null;
String fileName=null;
if (file!=null){
System.err.println("file!=null");
try {
data = file.getImage();
fileName=file.getImageFileName();
genereFile(data, fileName, response);
} catch (Throwable t) {
t.printStackTrace();
}
}
}
}
Et voici le log que ça me génère (SystemErr.log)
genereFile(com.ibm.workplace.wcm.api.WCM_LibraryImageComponent@71373fd7, com.ibm.wps.struts.base.WpsStrutsPortletResponseWrapper@2a9ffd6)
file!=null
genereFile(..., 2004-06-24-02.jpg, com.ibm.wps.struts.base.WpsStrutsPortletResponseWrapper@2a9ffd6)
response=com.ibm.wps.struts.base.WpsStrutsPortletResponseWrapper@2a9ffd6, os = null, data=[B@b26ffd0, extension=jpg, contentType=image/jpeg
Je ne comprends pas pourquoi le response.getOutputStream() renvoit null (response.getWriter() aussi)
De plus, une fois ma page chargée, l'affichage est... la dernière page sur laquelle il y avait un lien vers un document
Pourtant la JavaDoc de Struts dit à propos de la méthode exécute
Process the specified HTTP request, and create the corresponding HTTP response (or forward to another web component that will create it), with provision for handling exceptions thrown by the business logic. Return an ActionForward instance describing where and how control should be forwarded, or null if the response has already been completed.
Donc mes questions sont :
- Comment bien envoyer mes données vers le flux de sortie ?
- Dois-je changer le void en mes fonctions genereFile en HttpServletResponse ?
Merci d'avance pour votre aide
Totote
retrouvez moi sur totolmi