WCM and saved files
Web Server forum
Back To The Forum Home!Search!Private Messaging System

Web Server Talk Web Server Talk > Web Servers reviews > WebSphere > WebSphere Portal Server > WCM and saved files




  Last Thread   Next Thread Next
  Show Printable Version Email this Page Subscribe to this Thread      Post New Thread    Post A Reply      

    WCM and saved files  


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
04-05-05 12:54 PM

Hi everybody,
I created some contents in WCM and I need to store some files with them.

Actually, I have an authoring template, with a text field containing the Doc
umentId of a LibraryFileComponent.

Manipulating a content, I'm able to get the DocumentId of the LibraryFileCom
ponent. With this DocumentId, I'm able to get the data (a byte array) and th
e file name.

But I'm not able to get an URL to this component or to display the file on t
he screen (if it's an image for example)

I tried this kind of thing
[code]Map parametermap = new HashMap();
RenderingContext context = workspace.createRenderingContext(request, respons
e, parametermap);
context.setWcmServletPath("/connect"); // from PortalServer/wcm/config/aptri
xjpe.properties - wcm.servlet.path
context.setWcmWebAppPath("/wps/wcm"); // from PortalServer/wcm/config/aptrix
jpe.properties - wcm.context.path

context.setRenderedContent(myFile);
System.err.println("ws.generateURL(context, fichier) : "+ws.generateURL(cont
ext, myFile));
System.err.println("ws.render(context) : "+ws.render(context));[/code]

And I get this :
for generateURL : a bad URL with "null" in the middle of it
for render : File Not Found

I don't manage to get something better.

So I want to do another way.

As the real files are hidden, but not their data, when I use the method
[i]JavaDoc wrote: getFile()
Returns the contents of the file contained within this component as a byte a
rray.[/i]

I obtain a byte[] containing the data... That's what I want to use.

Method :
Open a new navigator window
put the good headers
put the data

That's what the page, which url is obtained by the render method, do. And th
at's what I want to reproduce

So I did this

[code]public class GenereFileOneAction extends Action {
public ActionForward execute
(ActionMapping mapping, ActionForm form,HttpServletRequest request,HttpServl
etResponse 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="+contentTyp
e);
if (os!=null){
os.write(data);
os.flush();
os.close();
}
} catch (Throwable t) {
t.printStackTrace();
}
}
}

public void genereFile(LibraryFileComponent file, HttpServletResponse respon
se){
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 respo
nse){
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();
}
}
}[/code]

But the result is not the one I want.

Here is my log
[i]genereFile(com.ibm.workplace.wcm.api.WCM_LibraryImageComponent@71373f
d7, com.ibm.wps.struts.base. WpsStrutsPortletResponseWrapper@2a9ffd6)

file!=null
genereFile(..., 2004-06-24-02.jpg, com.ibm.wps.struts.base.WpsStrutsPortletR
esponseWrapper@2a9ffd6)
response=com.ibm.wps.struts.base. WpsStrutsPortletResponseWrapper@2a9ffd6,
 os
 = null, data=[B@b26ffd0, extension=jpg, contentType=image/jpeg[/i]


My questions are :
- does any one knows why response.getOutputStream (either response.getWriter
) returns null
- when I click on a link to the action, the page on the screen is the last (
just where I come from) but the Struts JavaDoc says about the execute method
e

[i]Process the specified HTTP request, and create the corresponding HTTP
 response (or forward to another web component that will create it), with pr
ovision for handling exceptions thrown by the business logic. Return an Acti
onForward instance describing w
here and how control should be forwarded, or null if the response has alread
y been completed.[/i]

So do you think I might have a return in my genereFile methods ?

Thank you





[ Post a follow-up to this message ]



    Re: WCM and saved files  
George Niece


View Ip Address Report This Message To A Moderator Edit/Delete Message


 
04-05-05 10:54 PM

Long question.

Short answer.

Portal works in a two phase process, do business logic, then generate
display

Struts does both in in essentially one phase (please do not hammer me with
opinions about struts please)

This means that you have access to the response object just about anywhere
you are in Struts, however, in Struts portlets you only have that in the
appropriate phase, and hence no return output stream from the method because
of where you are trying to generate the output.

Good Luck,
geo



<asobrero@sysdeo.com> wrote in message
news:868813801.1112695900102.JavaMail.wassrvr@ltsgwas007.sby.ibm.com...
> Hi everybody,
> I created some contents in WCM and I need to store some files with them.
>
> Actually, I have an authoring template, with a text field containing the
DocumentId of a LibraryFileComponent.
>
> Manipulating a content, I'm able to get the DocumentId of the
LibraryFileComponent. With this DocumentId, I'm able to get the data (a byte
array) and the file name.
>
> But I'm not able to get an URL to this component or to display the file on
the screen (if it's an image for example)
>
> I tried this kind of thing
> [code]Map parametermap = new HashMap();
> RenderingContext context = workspace.createRenderingContext(request,
response, parametermap);
> context.setWcmServletPath("/connect"); // from
PortalServer/wcm/config/aptrixjpe.properties - wcm.servlet.path
> context.setWcmWebAppPath("/wps/wcm"); // from
PortalServer/wcm/config/aptrixjpe.properties - wcm.context.path
>
> context.setRenderedContent(myFile);
> System.err.println("ws.generateURL(context, fichier) :
"+ws.generateURL(context, myFile));
> System.err.println("ws.render(context) : "+ws.render(context));[/code]
>
> And I get this :
> for generateURL : a bad URL with "null" in the middle of it
> for render : File Not Found
>
> I don't manage to get something better.
>
> So I want to do another way.
>
> As the real files are hidden, but not their data, when I use the method
> [i]JavaDoc wrote: getFile()
> Returns the contents of the file contained within this component as a byte
array.[/i]
>
> I obtain a byte[] containing the data... That's what I want to use.
>
> Method :
> Open a new navigator window
> put the good headers
> put the data
>
> That's what the page, which url is obtained by the render method, do. And
that's what I want to reproduce
>
> So I did this
>
> [code]public class GenereFileOneAction extends Action {
>    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)&#
123;
>             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();
>          }
>       }
>    }[/code]
>
> But the result is not the one I want.
>
> Here is my log
>
[i]genereFile(com.ibm.workplace.wcm.api.WCM_LibraryImageComponent@71373f
d7,
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[/i]
>
>
> My questions are :
> - does any one knows why response.getOutputStream (either
response.getWriter) returns null
> - when I click on a link to the action, the page on the screen is the last
(just where I come from) but the Struts JavaDoc says about the execute
methode
>
> [i]Process the specified HTTP request, and create the corresponding HTTP[/vbco
l]
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.[/i][vbcol=seagreen]
>
> So do you think I might have a return in my genereFile methods ?
>
> Thank you







[ Post a follow-up to this message ]



    Sponsored Links  




 





   All times are GMT. The time now is 10:53 PM.      Post New Thread    Post A Reply      
  Last Thread   Next Thread Next


Most Popular forums 

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is OFF
 
Medical and Health forum | Computer Games Reviews | Graphics design forum

Back To The Top
Home | Usercp | Faq | Register