Hi, You should be able to get the FilePart object representing the uploaded file using request.get("upload_field"). If the file was stored into the upload dir (which is enabled by default) you can cast the FilePart to a FilePartFile from which you can get the java.io.File using getFile(). All other information on the file you can get from the the headers (FilePart.getHeaders()).
I've attached a sample action to move the file to another directory as described above. To enable it add this to the top sitemap (above the xsp/* pipeline): <map:match pattern="xsp/upload"> <map:act type="file-upload"> <map:parameter name="upload-dir" value="myuploaddir" /> <map:generate src="docs/samples/xsp/upload.xsp" type="serverpages" /> <map:transform src="stylesheets/dynamic-page2html.xsl" /> <map:serialize /> </map:act> </map:match> Note that the upload dir is created rin the webapps/cocoon dir instead of work/cocoon/cocoon-files. I've tested this code against the current CVS (cocoon 2.1-dev branch). It will probably not work with 2.0.2 since that release contained a bug (http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7510) Greets, Jeroen On Saturday 13 April 2002 02:41 am, you wrote: > Hi all, > > I've been mucking around with some file upload stuff and noticed a change > in behaviour since Joren's replacement for maybeupload was done back in > Feb. Before the change it was possible to still get hold of the reference > to the uploaded file from the request object in an action thus enabling you > to rewrite the file anywhere e.g. into a db BLOB. This is now not easily > possible since the request does not contain the right stuff any more. I > note from the archives that when the code was submitted the suggestion was > that control could be passed to an action to determine how and where to > write the file but the final code is driven by the web.xml parameters. > > I would really like to have the ability to chose as often as each request > where the uploaded file is to be put and will have a more detailed look at > the code over the weekend to see what might need doing. To me it seems > there are a number of possible choices: > > 1. a small patch to the MultipartRequest stuff that leaves the required > info in the request and then an action to do an upload to a place specified > via a param > 2. an alternative MultipartRequest handler > 3. a complex action that works if SimpleRequestHandler is used and not > Multipart - i.e. shift the work along (urgh?) > 4. something else maybe > > Just interested on soliciting some thoughts on this whilst I tip tappity > away! > > Cheers > > Jeremy > > > > > _________________________________________________________ > Do You Yahoo!? > Get your free @yahoo.com address at http://mail.yahoo.com
/***************************************************************************** * Copyright (C) The Apache Software Foundation. All rights reserved. * * ------------------------------------------------------------------------- * * This software is published under the terms of the Apache Software License * * version 1.1, a copy of which has been included with this distribution in * * the LICENSE file. * *****************************************************************************/ package org.apache.cocoon.acting; import org.apache.avalon.framework.configuration.Configurable; import org.apache.avalon.framework.configuration.Configuration; import org.apache.avalon.framework.configuration.ConfigurationException; import org.apache.avalon.framework.parameters.Parameters; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.cocoon.Constants; import org.apache.cocoon.environment.Redirector; import org.apache.cocoon.environment.Request; import org.apache.cocoon.environment.Context; import org.apache.cocoon.environment.SourceResolver; import org.apache.cocoon.acting.AbstractConfigurableAction; import org.apache.cocoon.components.request.multipart.*; import java.util.*; import java.io.*; public class UploadAction extends AbstractConfigurableAction implements ThreadSafe { Properties default_properties = null; public Map act(Redirector redirector, SourceResolver resolver, Map objectModel, String source, Parameters parameters) throws Exception { HashMap results = new HashMap(); Request request = (Request)objectModel.get(Constants.REQUEST_OBJECT); Context context = (Context)objectModel.get(Constants.CONTEXT_OBJECT); Properties properties = new Properties(default_properties); byte[] buf=new byte[4096]; Enumeration enum=request.getParameterNames(); while(enum.hasMoreElements()) { String name=(String)enum.nextElement(); Object obj=request.get(name); getLogger().debug(request.getClass().getName()); if (obj instanceof FilePart) { getLogger().debug("Uploading file: "+((FilePart)obj).getFileName()); String fileName=((FilePart)obj).getFileName(); String uploadDir=(String)parameters.getParameter("upload-dir"); String realPath=context.getRealPath("/"); if (realPath!=null) uploadDir=realPath+uploadDir; File dir=new File(uploadDir); if (!dir.exists()) dir.mkdir(); if (obj instanceof FilePartFile) { ((FilePartFile)obj).getFile().renameTo(new File(uploadDir+File.separator+fileName)); } else { FileOutputStream out=new FileOutputStream(uploadDir+File.separator+fileName); InputStream in=((FilePart)obj).getInputStream(); int read=in.read(buf); while(read>0) { out.write(buf,0,read); read=in.read(buf); } out.close(); } } else if (obj instanceof String) { getLogger().debug("Skipping parameter: "+(String)obj); } } return Collections.unmodifiableMap(results); } }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, email: [EMAIL PROTECTED]