You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@turbine.apache.org by Fabio Daprile <fa...@wuerth.it> on 2002/04/18 12:40:18 UTC

Re: #2 .getOutputStream() missing, it's driving me crazy ! another problem!!!!!!!

Hello,

I've another little problem regarding download.
I use a RawScreen (Download.vm) and my files are stored in a MySql DB, 
in a BLOB field.
It does work when you only display the file, the problem raises when you 
try to save this file.

hereafter how i call that page:
            <a 
href="$link.setPage("Download.vm").addQueryData("attachid", 
"$Attachment.getId()")">$Attachment.getFilename()</A>

and here how is et the headers:

            resp.setContentType(_attach.getContenttype());
            resp.setContentLength(_attach.getContent().length);
            resp.setHeader("Content-Disposition", "attachment");
            resp.setHeader("filename", _attach.getFilename());

The name of the file becomes "Download", the realname is lost.

How is it possible to keep the name of the file.

Peter Goode wrote:

>John,
>Gotcha, I was trying to assign it as OutputStream..., presumably that was breaking
>it (?)
>
>Anyway, fixed now following your help... it's amazing how useful it is to be told
>what you've already read (manual blindness sets in after a while!)
>
>
>Is there a better file upload/download example than the TDK inbuilt app (newapp), as
>that doesn't have any working download at present,
>despite the upload. The attached code works ok.
>
>
>Thank you for your help.
>
>
>Peter
>
>John McNally wrote:
>
>>HttpServletResponse inherits the getOutputStream() method from
>>ServletResponse.
>>
>>Peter Goode wrote:
>>
>>>Hi,
>>>
>>>I've been trying to get an uploaded file to be sent back...
>>>
>>>PROBLEM:
>>>I can't get binary access to the output stream (from within subclass of
>>>RawScreen).
>>>
>>>I'm using the code below which is reproduced around various Turbine
>>>sites&mailing lists.
>>>However, .getOutputStream() doesn't actually exist, according to all
>>>documentation, and indeed
>>>it fails to work (although I've not got any debugging, just
>>>comment/uncomment and see what lives !)
>>>
>>>Is anything wrong with this..? (well yes) and why does everyone claim to
>>>use .getOutputStream() when it doesn't
>>>exist... ?
>>>
>>>If it can be made to work then the Tutorial should be updated, because
>>>there is no working download file
>>>in there at present.
>>>
>>>Cheers for your help
>>>
>>>Peter
>>>
>>>/*------/// code starts ///---------*/
>>>
>>>public class Download extends RawScreen
>>>{
>>>     public void doOutput(RunData data) throws Exception
>>>     {
>>>         if (!isAuthorized(data))
>>>         {
>>>            // do something to tell the user they don't have permission
>>>         }
>>>         else
>>>         {
>>>            data.declareDirectResponse();
>>>            FileInputStream file_tosend = new
>>>FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
>>>            BufferedInputStream buffer_data = new
>>>BufferedInputStream(file_tosend);
>>>            // OK to here
>>>
>>>            // these 3 would kill it
>>>            //OutputStream stream_out =
>>>data.getResponse().getOutputStream();
>>>            //BufferedOutputStream buffer_out = new
>>>BufferedOutputStream(stream_out);
>>>            //buffer_out.write(buffer_data.read());
>>>
>>>            // *** *** this one kills it, when enabled *** ***
>>>            //OutputStream a = data.getResponse().getOutputStream();
>>>
>>>            // Will work and do all this, provided the
>>>.getOutputStream() call isn't made YYY
>>>            // Documentation for RunData.getResponse() -->
>>>javax.servlet.http.HttpServletResponse
>>>            // shows that there is no .getOutputStream() method... what
>>>should be going on !?
>>>            String str = "test 9D";
>>>            PrintWriter out = data.getOut();
>>>            out.println(str);
>>>            out.flush();
>>>            file_tosend.close();
>>>         }
>>>     }
>>>
>>>     public String getContentType(RunData data)
>>>     {
>>>        return "text/html";
>>>        //return "image/jpeg";
>>>     }
>>>
>>>     protected boolean isAuthorized(RunData data)
>>>     {
>>>         // do the security check here.  Get whatever info you need
>>>         // about the user from RunData
>>>        return true;
>>>     }
>>>}
>>>/*------/// ends ///---------*/
>>>
>>>--
>>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>>
>>--
>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>
>>
>>------------------------------------------------------------------------
>>
>>package org.mrexcessive.peter1.modules.screens;
>>
>>/* ====================================================================
>> * The Apache Software License, Version 1.1
>> *
>> * Copyright (c) 2001 The Apache Software Foundation.  All rights
>> * reserved.
>> *
>> * Redistribution and use in source and binary forms, with or without
>> * modification, are permitted provided that the following conditions
>> * are met:
>> *
>> * 1. Redistributions of source code must retain the above copyright
>> *    notice, this list of conditions and the following disclaimer.
>> *
>> * 2. Redistributions in binary form must reproduce the above copyright
>> *    notice, this list of conditions and the following disclaimer in
>> *    the documentation and/or other materials provided with the
>> *    distribution.
>> *
>> * 3. The end-user documentation included with the redistribution,
>> *    if any, must include the following acknowledgment:
>> *       "This product includes software developed by the
>> *        Apache Software Foundation (http://www.apache.org/)."
>> *    Alternately, this acknowledgment may appear in the software itself,
>> *    if and wherever such third-party acknowledgments normally appear.
>> *
>> * 4. The names "Apache" and "Apache Software Foundation" and 
>> *    "Apache Turbine" must not be used to endorse or promote products 
>> *    derived from this software without prior written permission. For 
>> *    written permission, please contact apache@apache.org.
>> *
>> * 5. Products derived from this software may not be called "Apache",
>> *    "Apache Turbine", nor may "Apache" appear in their name, without 
>> *    prior written permission of the Apache Software Foundation.
>> *
>> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>> * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>> * SUCH DAMAGE.
>> * ====================================================================
>> *
>> * This software consists of voluntary contributions made by many
>> * individuals on behalf of the Apache Software Foundation.  For more
>> * information on the Apache Software Foundation, please see
>> * <http://www.apache.org/>.
>> */
>>
>>import java.util.Vector;
>>import java.io.FileInputStream;
>>import java.io.BufferedInputStream;
>>import java.io.BufferedOutputStream;
>>import java.io.OutputStream;
>>import java.io.PrintWriter;
>>import javax.servlet.ServletOutputStream;
>>
>>import org.apache.turbine.modules.screens.RawScreen;
>>import org.apache.turbine.util.RunData;
>>
>>import org.apache.turbine.util.db.Criteria;
>>import org.mrexcessive.peter1.om.RdfPeer;
>>import org.apache.turbine.util.upload.FileItem;
>>import org.apache.turbine.services.servlet.TurbineServlet;
>>
>>import org.apache.velocity.context.Context;
>>
>>/**
>>Send back the previously uploaded file, uses RawScreen via Download.vm (?possibly wrong?)
>> */
>>public class Download extends RawScreen
>>{
>>     public void doOutput(RunData data) throws Exception
>>     {
>>         if (!isAuthorized(data))
>>         {
>>            // do something to tell the user they don't have permission
>>         }
>>         else
>>         {
>>            data.declareDirectResponse();
>>            FileInputStream file_tosend = new FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
>>            ServletOutputStream op = data.getResponse().getOutputStream();
>>            int bufsize = 16384;
>>            byte [] buf = new byte[bufsize];
>>            while (file_tosend.available() > 0) {     // belt & braces ? why
>>               int got = file_tosend.read(buf,0,bufsize);
>>               if (got != -1) {
>>                  op.write(buf,0,got);
>>               }
>>               else {
>>                  break;
>>               }
>>            }
>>            op.flush();
>>         }
>>     }
>>     
>>     public String getContentType(RunData data)
>>     {
>>        return "image/jpeg";
>>     }
>>
>>     protected boolean isAuthorized(RunData data)
>>     {
>>         // do the security check here.  Get whatever info you need
>>         // about the user from RunData
>>        return true;
>>     }
>>}
>>
>>
>>------------------------------------------------------------------------
>>
>>--
>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>

-- 

-- 
Fabio Daprile

Würth-Phoenix Srl
Via Kravogl 4, I-39100 Bolzano
Tel: +39 0471/564111 - (direct 564070)
Fax: +39 0471/564122

mailto:fabio.daprile@wuerth-phoenix.com
http://www.wuerth-phoenix.com
http://www.wuerth.com




Re: Download.vm filename fun (was #2 .getOutputStream ...)

Posted by Fabio Daprile <fa...@wuerth.it>.
Thnks Peter.
I'll try to do that, and i'll let you know if it works.

bye

Peter Goode wrote:

>Fabio,
>After some experiments, I think there's actually a logical problem with what you're trying to do.
>If you do Save As from IE or Netscape then the saveas dialog box is displayed before the browser
>goes to make the request. So there's no way that can work, the link is generated correctly
>
>The way to do it might be to redirect a class of URLs (/Download say) to a jsp/java and extract the filename from
>the
>trailing part (PATH_INFO) of the URL, so something like,
>    /Download/realfilename.extension
>With Download caught (by web.xml I think) and the script picking up the rest to find which file to send. Provided
>the 'Download' bit looks like a directory to the browsers they will use the other part for filename.
>
>(hopefully!)
>
>sorry gtg in a hurry, I'll try and get it to work later.
>
>Fabio Daprile wrote:
>
>>Hello,
>>
>>I've another little problem regarding download.
>>I use a RawScreen (Download.vm) and my files are stored in a MySql DB,
>>in a BLOB field.
>>It does work when you only display the file, the problem raises when you
>>try to save this file.
>>
>>hereafter how i call that page:
>>            <a
>>href="$link.setPage("Download.vm").addQueryData("attachid",
>>"$Attachment.getId()")">$Attachment.getFilename()</A>
>>
>>and here how is et the headers:
>>
>>            resp.setContentType(_attach.getContenttype());
>>            resp.setContentLength(_attach.getContent().length);
>>            resp.setHeader("Content-Disposition", "attachment");
>>            resp.setHeader("filename", _attach.getFilename());
>>
>>The name of the file becomes "Download", the realname is lost.
>>
>>How is it possible to keep the name of the file.
>>
>>Peter Goode wrote:
>>
>>>John,
>>>Gotcha, I was trying to assign it as OutputStream..., presumably that was breaking
>>>it (?)
>>>
>>>Anyway, fixed now following your help... it's amazing how useful it is to be told
>>>what you've already read (manual blindness sets in after a while!)
>>>
>>>
>>>Is there a better file upload/download example than the TDK inbuilt app (newapp), as
>>>that doesn't have any working download at present,
>>>despite the upload. The attached code works ok.
>>>
>>>
>>>Thank you for your help.
>>>
>>>
>>>Peter
>>>
>>>John McNally wrote:
>>>
>>>>HttpServletResponse inherits the getOutputStream() method from
>>>>ServletResponse.
>>>>
>>>>Peter Goode wrote:
>>>>
>>>>>Hi,
>>>>>
>>>>>I've been trying to get an uploaded file to be sent back...
>>>>>
>>>>>PROBLEM:
>>>>>I can't get binary access to the output stream (from within subclass of
>>>>>RawScreen).
>>>>>
>>>>>I'm using the code below which is reproduced around various Turbine
>>>>>sites&mailing lists.
>>>>>However, .getOutputStream() doesn't actually exist, according to all
>>>>>documentation, and indeed
>>>>>it fails to work (although I've not got any debugging, just
>>>>>comment/uncomment and see what lives !)
>>>>>
>>>>>Is anything wrong with this..? (well yes) and why does everyone claim to
>>>>>use .getOutputStream() when it doesn't
>>>>>exist... ?
>>>>>
>>>>>If it can be made to work then the Tutorial should be updated, because
>>>>>there is no working download file
>>>>>in there at present.
>>>>>
>>>>>Cheers for your help
>>>>>
>>>>>Peter
>>>>>
>>>>>/*------/// code starts ///---------*/
>>>>>
>>>>>public class Download extends RawScreen
>>>>>{
>>>>>    public void doOutput(RunData data) throws Exception
>>>>>    {
>>>>>        if (!isAuthorized(data))
>>>>>        {
>>>>>           // do something to tell the user they don't have permission
>>>>>        }
>>>>>        else
>>>>>        {
>>>>>           data.declareDirectResponse();
>>>>>           FileInputStream file_tosend = new
>>>>>FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
>>>>>           BufferedInputStream buffer_data = new
>>>>>BufferedInputStream(file_tosend);
>>>>>           // OK to here
>>>>>
>>>>>           // these 3 would kill it
>>>>>           //OutputStream stream_out =
>>>>>data.getResponse().getOutputStream();
>>>>>           //BufferedOutputStream buffer_out = new
>>>>>BufferedOutputStream(stream_out);
>>>>>           //buffer_out.write(buffer_data.read());
>>>>>
>>>>>           // *** *** this one kills it, when enabled *** ***
>>>>>           //OutputStream a = data.getResponse().getOutputStream();
>>>>>
>>>>>           // Will work and do all this, provided the
>>>>>.getOutputStream() call isn't made YYY
>>>>>           // Documentation for RunData.getResponse() -->
>>>>>javax.servlet.http.HttpServletResponse
>>>>>           // shows that there is no .getOutputStream() method... what
>>>>>should be going on !?
>>>>>           String str = "test 9D";
>>>>>           PrintWriter out = data.getOut();
>>>>>           out.println(str);
>>>>>           out.flush();
>>>>>           file_tosend.close();
>>>>>        }
>>>>>    }
>>>>>
>>>>>    public String getContentType(RunData data)
>>>>>    {
>>>>>       return "text/html";
>>>>>       //return "image/jpeg";
>>>>>    }
>>>>>
>>>>>    protected boolean isAuthorized(RunData data)
>>>>>    {
>>>>>        // do the security check here.  Get whatever info you need
>>>>>        // about the user from RunData
>>>>>       return true;
>>>>>    }
>>>>>}
>>>>>/*------/// ends ///---------*/
>>>>>
>>>>>--
>>>>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>>>>
>>>>--
>>>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>>>
>>>>
>>>>------------------------------------------------------------------------
>>>>
>>>>package org.mrexcessive.peter1.modules.screens;
>>>>
>>>>/* ====================================================================
>>>>* The Apache Software License, Version 1.1
>>>>*
>>>>* Copyright (c) 2001 The Apache Software Foundation.  All rights
>>>>* reserved.
>>>>*
>>>>* Redistribution and use in source and binary forms, with or without
>>>>* modification, are permitted provided that the following conditions
>>>>* are met:
>>>>*
>>>>* 1. Redistributions of source code must retain the above copyright
>>>>*    notice, this list of conditions and the following disclaimer.
>>>>*
>>>>* 2. Redistributions in binary form must reproduce the above copyright
>>>>*    notice, this list of conditions and the following disclaimer in
>>>>*    the documentation and/or other materials provided with the
>>>>*    distribution.
>>>>*
>>>>* 3. The end-user documentation included with the redistribution,
>>>>*    if any, must include the following acknowledgment:
>>>>*       "This product includes software developed by the
>>>>*        Apache Software Foundation (http://www.apache.org/)."
>>>>*    Alternately, this acknowledgment may appear in the software itself,
>>>>*    if and wherever such third-party acknowledgments normally appear.
>>>>*
>>>>* 4. The names "Apache" and "Apache Software Foundation" and
>>>>*    "Apache Turbine" must not be used to endorse or promote products
>>>>*    derived from this software without prior written permission. For
>>>>*    written permission, please contact apache@apache.org.
>>>>*
>>>>* 5. Products derived from this software may not be called "Apache",
>>>>*    "Apache Turbine", nor may "Apache" appear in their name, without
>>>>*    prior written permission of the Apache Software Foundation.
>>>>*
>>>>* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>>>>* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>>>>* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>>>>* DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>>>>* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>>>>* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>>>>* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>>>>* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>>>>* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>>>>* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>>>>* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>>>>* SUCH DAMAGE.
>>>>* ====================================================================
>>>>*
>>>>* This software consists of voluntary contributions made by many
>>>>* individuals on behalf of the Apache Software Foundation.  For more
>>>>* information on the Apache Software Foundation, please see
>>>>* <http://www.apache.org/>.
>>>>*/
>>>>
>>>>import java.util.Vector;
>>>>import java.io.FileInputStream;
>>>>import java.io.BufferedInputStream;
>>>>import java.io.BufferedOutputStream;
>>>>import java.io.OutputStream;
>>>>import java.io.PrintWriter;
>>>>import javax.servlet.ServletOutputStream;
>>>>
>>>>import org.apache.turbine.modules.screens.RawScreen;
>>>>import org.apache.turbine.util.RunData;
>>>>
>>>>import org.apache.turbine.util.db.Criteria;
>>>>import org.mrexcessive.peter1.om.RdfPeer;
>>>>import org.apache.turbine.util.upload.FileItem;
>>>>import org.apache.turbine.services.servlet.TurbineServlet;
>>>>
>>>>import org.apache.velocity.context.Context;
>>>>
>>>>/**
>>>>Send back the previously uploaded file, uses RawScreen via Download.vm (?possibly wrong?)
>>>>*/
>>>>public class Download extends RawScreen
>>>>{
>>>>    public void doOutput(RunData data) throws Exception
>>>>    {
>>>>        if (!isAuthorized(data))
>>>>        {
>>>>           // do something to tell the user they don't have permission
>>>>        }
>>>>        else
>>>>        {
>>>>           data.declareDirectResponse();
>>>>           FileInputStream file_tosend = new FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
>>>>           ServletOutputStream op = data.getResponse().getOutputStream();
>>>>           int bufsize = 16384;
>>>>           byte [] buf = new byte[bufsize];
>>>>           while (file_tosend.available() > 0) {     // belt & braces ? why
>>>>              int got = file_tosend.read(buf,0,bufsize);
>>>>              if (got != -1) {
>>>>                 op.write(buf,0,got);
>>>>              }
>>>>              else {
>>>>                 break;
>>>>              }
>>>>           }
>>>>           op.flush();
>>>>        }
>>>>    }
>>>>
>>>>    public String getContentType(RunData data)
>>>>    {
>>>>       return "image/jpeg";
>>>>    }
>>>>
>>>>    protected boolean isAuthorized(RunData data)
>>>>    {
>>>>        // do the security check here.  Get whatever info you need
>>>>        // about the user from RunData
>>>>       return true;
>>>>    }
>>>>}
>>>>
>>>>
>>>>------------------------------------------------------------------------
>>>>
>>>>--
>>>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>>>>For additional commands, e-mail: <ma...@jakarta.apache.org>
>>>>
>>--
>>
>>--
>>Fabio Daprile
>>
>>Würth-Phoenix Srl
>>Via Kravogl 4, I-39100 Bolzano
>>Tel: +39 0471/564111 - (direct 564070)
>>Fax: +39 0471/564122
>>
>>mailto:fabio.daprile@wuerth-phoenix.com
>>http://www.wuerth-phoenix.com
>>http://www.wuerth.com
>>
>
>
>--
>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>
>
>
>

-- 

-- 
Fabio Daprile

Würth-Phoenix Srl
Via Kravogl 4, I-39100 Bolzano
Tel: +39 0471/564111 - (direct 564070)
Fax: +39 0471/564122

mailto:fabio.daprile@wuerth-phoenix.com
http://www.wuerth-phoenix.com
http://www.wuerth.com




Re: Download.vm filename fun (was #2 .getOutputStream ...)

Posted by Fabio Daprile <fa...@wuerth.it>.
hi Eric,

thank's for answer. i'll try and let you know if it works.

bye

Eric Dobbs wrote:

>
>> Fabio Daprile wrote:
>>
>> I've another little problem regarding download.
>> I use a RawScreen (Download.vm) and my files are stored in a MySql DB,
>> in a BLOB field.
>> It does work when you only display the file, the problem raises when you
>> try to save this file.
>>
>> hereafter how i call that page:
>>             <a
>> href="$link.setPage("Download.vm").addQueryData("attachid",
>> "$Attachment.getId()")">$Attachment.getFilename()</A>
>>
>> and here how is et the headers:
>>
>>             resp.setContentType(_attach.getContenttype());
>>             resp.setContentLength(_attach.getContent().length);
>>             resp.setHeader("Content-Disposition", "attachment");
>>             resp.setHeader("filename", _attach.getFilename());
>>
>> The name of the file becomes "Download", the realname is lost.
>>
>> How is it possible to keep the name of the file.
>
>
>
> We've used a line like this to set the Content-Disposition with the 
> file name:  (I think the line break is important, but can't remember 
> for sure)
>
>   data.getResponse().setHeader("Content-Disposition", "inline;
> filename=<filename here>");
>
> for your example that would be:
>   resp.setHeader("Content-Disposition", "inline;
> filename=" + _attach.getFilename());
>
> Hope that helps.
> -Eric
>
> -- 
> To unsubscribe, e-mail:   
> <ma...@jakarta.apache.org>
> For additional commands, e-mail: 
> <ma...@jakarta.apache.org>
>
>
>

-- 

-- 
Fabio Daprile

Würth-Phoenix Srl
Via Kravogl 4, I-39100 Bolzano
Tel: +39 0471/564111 - (direct 564070)
Fax: +39 0471/564122

mailto:fabio.daprile@wuerth-phoenix.com
http://www.wuerth-phoenix.com
http://www.wuerth.com





--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: Download.vm filename fun (was #2 .getOutputStream ...)

Posted by Eric Dobbs <er...@dobbse.net>.
> Fabio Daprile wrote:
>
> I've another little problem regarding download.
> I use a RawScreen (Download.vm) and my files are stored in a MySql DB,
> in a BLOB field.
> It does work when you only display the file, the problem raises when you
> try to save this file.
>
> hereafter how i call that page:
>             <a
> href="$link.setPage("Download.vm").addQueryData("attachid",
> "$Attachment.getId()")">$Attachment.getFilename()</A>
>
> and here how is et the headers:
>
>             resp.setContentType(_attach.getContenttype());
>             resp.setContentLength(_attach.getContent().length);
>             resp.setHeader("Content-Disposition", "attachment");
>             resp.setHeader("filename", _attach.getFilename());
>
> The name of the file becomes "Download", the realname is lost.
>
> How is it possible to keep the name of the file.


We've used a line like this to set the Content-Disposition with the file 
name:  (I think the line break is important, but can't remember for sure)

   data.getResponse().setHeader("Content-Disposition", "inline;
filename=<filename here>");

for your example that would be:
   resp.setHeader("Content-Disposition", "inline;
filename=" + _attach.getFilename());

Hope that helps.
-Eric

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Download.vm filename fun (was #2 .getOutputStream ...)

Posted by Peter Goode <pe...@mrexcessive.net>.
Fabio,
After some experiments, I think there's actually a logical problem with what you're trying to do.
If you do Save As from IE or Netscape then the saveas dialog box is displayed before the browser
goes to make the request. So there's no way that can work, the link is generated correctly

The way to do it might be to redirect a class of URLs (/Download say) to a jsp/java and extract the filename from
the
trailing part (PATH_INFO) of the URL, so something like,
    /Download/realfilename.extension
With Download caught (by web.xml I think) and the script picking up the rest to find which file to send. Provided
the 'Download' bit looks like a directory to the browsers they will use the other part for filename.

(hopefully!)

sorry gtg in a hurry, I'll try and get it to work later.

Fabio Daprile wrote:

> Hello,
>
> I've another little problem regarding download.
> I use a RawScreen (Download.vm) and my files are stored in a MySql DB,
> in a BLOB field.
> It does work when you only display the file, the problem raises when you
> try to save this file.
>
> hereafter how i call that page:
>             <a
> href="$link.setPage("Download.vm").addQueryData("attachid",
> "$Attachment.getId()")">$Attachment.getFilename()</A>
>
> and here how is et the headers:
>
>             resp.setContentType(_attach.getContenttype());
>             resp.setContentLength(_attach.getContent().length);
>             resp.setHeader("Content-Disposition", "attachment");
>             resp.setHeader("filename", _attach.getFilename());
>
> The name of the file becomes "Download", the realname is lost.
>
> How is it possible to keep the name of the file.
>
> Peter Goode wrote:
>
> >John,
> >Gotcha, I was trying to assign it as OutputStream..., presumably that was breaking
> >it (?)
> >
> >Anyway, fixed now following your help... it's amazing how useful it is to be told
> >what you've already read (manual blindness sets in after a while!)
> >
> >
> >Is there a better file upload/download example than the TDK inbuilt app (newapp), as
> >that doesn't have any working download at present,
> >despite the upload. The attached code works ok.
> >
> >
> >Thank you for your help.
> >
> >
> >Peter
> >
> >John McNally wrote:
> >
> >>HttpServletResponse inherits the getOutputStream() method from
> >>ServletResponse.
> >>
> >>Peter Goode wrote:
> >>
> >>>Hi,
> >>>
> >>>I've been trying to get an uploaded file to be sent back...
> >>>
> >>>PROBLEM:
> >>>I can't get binary access to the output stream (from within subclass of
> >>>RawScreen).
> >>>
> >>>I'm using the code below which is reproduced around various Turbine
> >>>sites&mailing lists.
> >>>However, .getOutputStream() doesn't actually exist, according to all
> >>>documentation, and indeed
> >>>it fails to work (although I've not got any debugging, just
> >>>comment/uncomment and see what lives !)
> >>>
> >>>Is anything wrong with this..? (well yes) and why does everyone claim to
> >>>use .getOutputStream() when it doesn't
> >>>exist... ?
> >>>
> >>>If it can be made to work then the Tutorial should be updated, because
> >>>there is no working download file
> >>>in there at present.
> >>>
> >>>Cheers for your help
> >>>
> >>>Peter
> >>>
> >>>/*------/// code starts ///---------*/
> >>>
> >>>public class Download extends RawScreen
> >>>{
> >>>     public void doOutput(RunData data) throws Exception
> >>>     {
> >>>         if (!isAuthorized(data))
> >>>         {
> >>>            // do something to tell the user they don't have permission
> >>>         }
> >>>         else
> >>>         {
> >>>            data.declareDirectResponse();
> >>>            FileInputStream file_tosend = new
> >>>FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
> >>>            BufferedInputStream buffer_data = new
> >>>BufferedInputStream(file_tosend);
> >>>            // OK to here
> >>>
> >>>            // these 3 would kill it
> >>>            //OutputStream stream_out =
> >>>data.getResponse().getOutputStream();
> >>>            //BufferedOutputStream buffer_out = new
> >>>BufferedOutputStream(stream_out);
> >>>            //buffer_out.write(buffer_data.read());
> >>>
> >>>            // *** *** this one kills it, when enabled *** ***
> >>>            //OutputStream a = data.getResponse().getOutputStream();
> >>>
> >>>            // Will work and do all this, provided the
> >>>.getOutputStream() call isn't made YYY
> >>>            // Documentation for RunData.getResponse() -->
> >>>javax.servlet.http.HttpServletResponse
> >>>            // shows that there is no .getOutputStream() method... what
> >>>should be going on !?
> >>>            String str = "test 9D";
> >>>            PrintWriter out = data.getOut();
> >>>            out.println(str);
> >>>            out.flush();
> >>>            file_tosend.close();
> >>>         }
> >>>     }
> >>>
> >>>     public String getContentType(RunData data)
> >>>     {
> >>>        return "text/html";
> >>>        //return "image/jpeg";
> >>>     }
> >>>
> >>>     protected boolean isAuthorized(RunData data)
> >>>     {
> >>>         // do the security check here.  Get whatever info you need
> >>>         // about the user from RunData
> >>>        return true;
> >>>     }
> >>>}
> >>>/*------/// ends ///---------*/
> >>>
> >>>--
> >>>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> >>>For additional commands, e-mail: <ma...@jakarta.apache.org>
> >>>
> >>--
> >>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> >>For additional commands, e-mail: <ma...@jakarta.apache.org>
> >>
> >>
> >>------------------------------------------------------------------------
> >>
> >>package org.mrexcessive.peter1.modules.screens;
> >>
> >>/* ====================================================================
> >> * The Apache Software License, Version 1.1
> >> *
> >> * Copyright (c) 2001 The Apache Software Foundation.  All rights
> >> * reserved.
> >> *
> >> * Redistribution and use in source and binary forms, with or without
> >> * modification, are permitted provided that the following conditions
> >> * are met:
> >> *
> >> * 1. Redistributions of source code must retain the above copyright
> >> *    notice, this list of conditions and the following disclaimer.
> >> *
> >> * 2. Redistributions in binary form must reproduce the above copyright
> >> *    notice, this list of conditions and the following disclaimer in
> >> *    the documentation and/or other materials provided with the
> >> *    distribution.
> >> *
> >> * 3. The end-user documentation included with the redistribution,
> >> *    if any, must include the following acknowledgment:
> >> *       "This product includes software developed by the
> >> *        Apache Software Foundation (http://www.apache.org/)."
> >> *    Alternately, this acknowledgment may appear in the software itself,
> >> *    if and wherever such third-party acknowledgments normally appear.
> >> *
> >> * 4. The names "Apache" and "Apache Software Foundation" and
> >> *    "Apache Turbine" must not be used to endorse or promote products
> >> *    derived from this software without prior written permission. For
> >> *    written permission, please contact apache@apache.org.
> >> *
> >> * 5. Products derived from this software may not be called "Apache",
> >> *    "Apache Turbine", nor may "Apache" appear in their name, without
> >> *    prior written permission of the Apache Software Foundation.
> >> *
> >> * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
> >> * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
> >> * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
> >> * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
> >> * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
> >> * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
> >> * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
> >> * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
> >> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
> >> * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
> >> * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
> >> * SUCH DAMAGE.
> >> * ====================================================================
> >> *
> >> * This software consists of voluntary contributions made by many
> >> * individuals on behalf of the Apache Software Foundation.  For more
> >> * information on the Apache Software Foundation, please see
> >> * <http://www.apache.org/>.
> >> */
> >>
> >>import java.util.Vector;
> >>import java.io.FileInputStream;
> >>import java.io.BufferedInputStream;
> >>import java.io.BufferedOutputStream;
> >>import java.io.OutputStream;
> >>import java.io.PrintWriter;
> >>import javax.servlet.ServletOutputStream;
> >>
> >>import org.apache.turbine.modules.screens.RawScreen;
> >>import org.apache.turbine.util.RunData;
> >>
> >>import org.apache.turbine.util.db.Criteria;
> >>import org.mrexcessive.peter1.om.RdfPeer;
> >>import org.apache.turbine.util.upload.FileItem;
> >>import org.apache.turbine.services.servlet.TurbineServlet;
> >>
> >>import org.apache.velocity.context.Context;
> >>
> >>/**
> >>Send back the previously uploaded file, uses RawScreen via Download.vm (?possibly wrong?)
> >> */
> >>public class Download extends RawScreen
> >>{
> >>     public void doOutput(RunData data) throws Exception
> >>     {
> >>         if (!isAuthorized(data))
> >>         {
> >>            // do something to tell the user they don't have permission
> >>         }
> >>         else
> >>         {
> >>            data.declareDirectResponse();
> >>            FileInputStream file_tosend = new FileInputStream(TurbineServlet.getRealPath("/uploaded.file"));
> >>            ServletOutputStream op = data.getResponse().getOutputStream();
> >>            int bufsize = 16384;
> >>            byte [] buf = new byte[bufsize];
> >>            while (file_tosend.available() > 0) {     // belt & braces ? why
> >>               int got = file_tosend.read(buf,0,bufsize);
> >>               if (got != -1) {
> >>                  op.write(buf,0,got);
> >>               }
> >>               else {
> >>                  break;
> >>               }
> >>            }
> >>            op.flush();
> >>         }
> >>     }
> >>
> >>     public String getContentType(RunData data)
> >>     {
> >>        return "image/jpeg";
> >>     }
> >>
> >>     protected boolean isAuthorized(RunData data)
> >>     {
> >>         // do the security check here.  Get whatever info you need
> >>         // about the user from RunData
> >>        return true;
> >>     }
> >>}
> >>
> >>
> >>------------------------------------------------------------------------
> >>
> >>--
> >>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
> >>For additional commands, e-mail: <ma...@jakarta.apache.org>
> >>
>
> --
>
> --
> Fabio Daprile
>
> Würth-Phoenix Srl
> Via Kravogl 4, I-39100 Bolzano
> Tel: +39 0471/564111 - (direct 564070)
> Fax: +39 0471/564122
>
> mailto:fabio.daprile@wuerth-phoenix.com
> http://www.wuerth-phoenix.com
> http://www.wuerth.com


--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>


Re: #2 .getOutputStream() missing, it's driving me crazy ! another problem!!!!!!!

Posted by Fabio Daprile <fa...@wuerth.it>.
hello Mark,

i've tried but the problem remains the same.

thank's anyway.

bye

Mark Nutter wrote:

>Try this:  instead of setting a "filename" header, set your
>Content-Dispostion header as follows:
>
>  resp.setHeader("Content-Disposition", "inline; filename=\"" +
>_attach.getFilename() + "\"");
>
>Mark Nutter
>javadev@linklore.org
>My horoscope says today is a bad day to be superstitious.
>
>On Thu, 2002-04-18 at 06:40, Fabio Daprile wrote:
>
>>Hello,
>>
>>I've another little problem regarding download.
>>I use a RawScreen (Download.vm) and my files are stored in a MySql DB, 
>>in a BLOB field.
>>It does work when you only display the file, the problem raises when you 
>>try to save this file.
>>
>>hereafter how i call that page:
>>            <a 
>>href="$link.setPage("Download.vm").addQueryData("attachid", 
>>"$Attachment.getId()")">$Attachment.getFilename()</A>
>>
>>and here how is et the headers:
>>
>>            resp.setContentType(_attach.getContenttype());
>>            resp.setContentLength(_attach.getContent().length);
>>            resp.setHeader("Content-Disposition", "attachment");
>>            resp.setHeader("filename", _attach.getFilename());
>>
>>The name of the file becomes "Download", the realname is lost.
>>
>>How is it possible to keep the name of the file.
>>
>
>
>
>
>
>--
>To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
>For additional commands, e-mail: <ma...@jakarta.apache.org>
>
>
>

-- 

-- 
Fabio Daprile

Würth-Phoenix Srl
Via Kravogl 4, I-39100 Bolzano
Tel: +39 0471/564111 - (direct 564070)
Fax: +39 0471/564122

mailto:fabio.daprile@wuerth-phoenix.com
http://www.wuerth-phoenix.com
http://www.wuerth.com




Re: #2 .getOutputStream() missing, it's driving me crazy ! another problem!!!!!!!

Posted by Mark Nutter <ja...@linklore.org>.
Try this:  instead of setting a "filename" header, set your
Content-Dispostion header as follows:

  resp.setHeader("Content-Disposition", "inline; filename=\"" +
_attach.getFilename() + "\"");

Mark Nutter
javadev@linklore.org
My horoscope says today is a bad day to be superstitious.

On Thu, 2002-04-18 at 06:40, Fabio Daprile wrote:
> Hello,
> 
> I've another little problem regarding download.
> I use a RawScreen (Download.vm) and my files are stored in a MySql DB, 
> in a BLOB field.
> It does work when you only display the file, the problem raises when you 
> try to save this file.
> 
> hereafter how i call that page:
>             <a 
> href="$link.setPage("Download.vm").addQueryData("attachid", 
> "$Attachment.getId()")">$Attachment.getFilename()</A>
> 
> and here how is et the headers:
> 
>             resp.setContentType(_attach.getContenttype());
>             resp.setContentLength(_attach.getContent().length);
>             resp.setHeader("Content-Disposition", "attachment");
>             resp.setHeader("filename", _attach.getFilename());
> 
> The name of the file becomes "Download", the realname is lost.
> 
> How is it possible to keep the name of the file.
> 





--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>