Hello, so far I got no answer to the problem which is described below. In the meantime I created the following workaround: The jsp Form does not call a Portlet, but a Servlet. In this servlet I used code adapted from the examples in the jakarta commons FileUpload:
boolean isMultipart = FileUpload.isMultipartContent(request); if( !isMultipart) { return("processRequest: Request is no Multipart request!!!"); } // use defaults for maximum size of item to be retained in memory // Create a new file upload handler DiskFileUpload upload = new DiskFileUpload(); // Parse the request get a list of FileItem objects List items= null; try { items = upload.parseRequest(request); } catch (FileUploadException ex) { return("processRequest: FileUploadException!!!" + ex); } // handling items... This code works fine and I am able to make a cross platform upload. I put this code in the portlet and there the List items was empty! Thomas Grundey First Try: Hello, I have problems with code I copied from Code in org.apache.jetspeed.modules.actions.portlets.designer.HeaderAction. I use Jetspeed 1.5 which installs turbine-2.2.jar My adapted code looks like this: private String saveFile(RunData rundata, HttpServletRequest request, String icn, String uploadLocation, String uploadBOClass, String getDetailMethod, String uploadMethod, String uploadUpdateColumn) { String errorMessage= null; try { // Code like the code in org.apache.jetspeed.modules.actions.portlets.designer.HeaderAction // The standard method to get multiform data can be used in a servlet but does not work // in Jetspeed portlets!! String fileTypes[] = { "image/jpg", "image/gif", "image/jpeg", "application/x-shockwave-flash", "image/png", "image/x-png" }; FileItem fileItem = rundata.getParameters().getFileItem("file"); String select= rundata.getParameters().getString("select").trim(); String lookUpTableKey= "##" + ICNPortlet.CHOICE_SHOW + icn + "##";; String lookUpTable= rundata.getParameters().getString(lookUpTableKey).trim(); O_I key= null; if( lookUpTable != null ) { key= translateChoiceIcn( select, lookUpTable); // get selected value for the icn } else { key= new XString(select); } if (fileItem != null) { File file = new File(fileItem.getFileName()); String fileName= file.getName(); Log.info("Uploading " + fileName); // to play it save: int index = fileName.lastIndexOf("\\"); int index2 = fileName.lastIndexOf("//"); if (index > 0) { fileName = fileName.substring(index + 1); } if (index2 > 0) { fileName= fileName.substring(index2 + 1); } String webappPath= request.getSession().getServletContext().getRealPath("/"); String path= null; if( uploadLocation != null) { path= webappPath + uploadLocation; } else { path= webappPath; } File f = new File(path + fileName); if (f.exists()) { f.delete(); } FileUploader fu = new FileUploader(); // a jetspeed helper class // the uploader creates files even when the user types an invalid filename like dummy.jpg! // ==> check length! long len= file.length(); if( len == 0) { errorMessage= CU.getI18N("error.upload.error") + " " + fileName + CU.getI18N("error.upload.zero"); Log.error( errorMessage); return errorMessage; } // the check for valid fileTypes does not work!! // ==> check here boolean hasUploaded= false; index= fileName.lastIndexOf("."); String fileExtension= fileName.substring(index + 1); if( fileExtension.equals("jpg") || fileExtension.equals("gif") || fileExtension.equals("png") || fileExtension.equals("jpeg")) { Log.info("Copy " + fileName + " to " + path); // hasUploaded = fu.upload(fileItem, path, fileTypes); FileInputStream is= new FileInputStream(file); FileOutputStream os= new FileOutputStream(path + fileName); copyFile( is, os, true); hasUploaded= true; } else { errorMessage= CU.getI18N("error.upload.error") + " " + fileName + CU.getI18N("error.upload.type"); Log.error( errorMessage); return errorMessage; } if (hasUploaded == true) { ... This works fine if I make an upload from another Windows Box to my Windows Computer. The log on my windows boxs (turbine.log) says: 2004-09-29 18:26:17,578 [http-8080-Processor25] INFO JetspeedLoggingService - Uploading hofmann.jpeg 2004-09-29 18:26:17,593 [http-8080-Processor25] INFO JetspeedLoggingService - Copy hofmann.jpeg to D:\Programme\Apache Software Foundation\Tomcat 5.0\webapps\jetspeed\probusiness/empphotos/ You see, the first INFO line does not contain the path (you can see the place where this entry is made in the code above). I copied everything to a Linux-Server, but this time I failed! The log on the linux server says (the german error message says that the file length is 0): 2004-09-30 12:18:10,895 [TP-Processor10] INFO JetspeedLoggingService - Uploading C:\tmp\aaaBanner1.jpg 2004-09-30 12:18:10,896 [TP-Processor10] ERROR JetspeedLoggingService - Fehler beim Hochladen von aaaBanner1.jpg. Die Länge ist 0. Here we have the full path! Then I copied another image file to /tmp on the Linux server and entered in the HTML Form /tmp/hofmann.jpeg 2004-09-23 13:36:27,986 [TP-Processor12] INFO JetspeedLoggingService - Uploading hofmann.jpeg 2004-09-23 13:36:27,986 [TP-Processor12] INFO JetspeedLoggingService - Copy hofmann.jpeg to /home/tomcats/t1/jakarta-tomcat-5.0.25/webapps/jetspeed/probusiness/empp hotos/ So, from Windows to Windows and from a local position on the Linix-Server the code File file = new File(fileItem.getFileName()); String fileName= file.getName(); Results in a file name without path, but from windows to linux I get the full path! I searched in the bug database and found a similar problem under TAPESTRY-127 UploadPart/getFileName(). But it seems that Jetspeed 1.5 does not use TAPESTRY. I looked in the code of FileItem (turbine-2.3, because this is the current download). There the file name is set in the constructor. Any comments or help? By the way the class FileUploader also has some problems: It does not check for the correct file types (therefore I make a check in my code). It also did not work under Linux (therefore the line: hasUploaded = fu.upload(fileItem, path, fileTypes); is commented out and I make the copy with my own code (see above). Thomas Grundey --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]