Folks, Even I am also facing same problem.
I upload a file from Flex to server through a Java servlet. My project environment : ------------------------------------------------ Flex 3 Targeted : Flash Player 9.0.214 BlazeDS Tomcat 6.0.18 Awaiting response. ~ Mor ---------- Forwarded message ---------- From: baji <[email protected]> Date: Mar 21, 8:21 pm Subject: File Upload using flex and java servlet To: Flex India Community Hi, I am trying to do file upload from flex to java servlet..problem is that request is not coming to servlet here is error: Error #2038 : File I/o Error :URL:http://171.189.87.49:7001/WSTest/ action/FileServlet.. any help would be apprecaited.. here is my mxml ........................ <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();"> <mx:Script> <![CDATA[ // file upload functions import mx.controls.Alert; import mx.utils.ObjectUtil; import flash.events.*; import flash.net.FileReference; import flash.net.URLRequest; import flash.net.URLLoader; import flash.net.URLStream; public var fileRef:FileReference = new FileReference(); public var req:URLRequest = new URLRequest("http:// 171.189.87.49:7001/WSTest/upload.jsp"); // private var loader:URLLoader = new URLLoader(); // private var stream:URLStream; private function initApp():void { // fileRef = new FileReference(); fileRef.addEventListener(Event.CANCEL, traceEvent); fileRef.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA, completeEvent); fileRef.addEventListener(Event.SELECT, selectEvent); fileRef.addEventListener(IOErrorEvent.IO_ERROR, onUploadIoError); fileRef.addEventListener(Event.OPEN, traceEvent); fileRef.addEventListener(ProgressEvent.PROGRESS, progressEvent); fileRef.addEventListener(SecurityErrorEvent.SECURITY_ERROR, traceEvent); } private function traceEvent(event:Event):void { var tmp:String = "================================\n"; ta.text += tmp + event.type + " event:" + mx.utils.ObjectUtil.toString(event) + "\n" ; ta.verticalScrollPosition += 20; } private function ioErrorEvent(event:IOErrorEvent):void { traceEvent(event); Alert.show("IOError:" + event.text); } private function selectEvent(event:Event):void{ btn_upload.enabled = true; traceEvent(event); filename.text = fileRef.name; progressBar.setProgress(0, 100); progressBar.label = "Loading 0%"; } private function progressEvent (event:ProgressEvent):void { var numPerc:Number = Math.round((Number (event.bytesLoaded) / Number(event.bytesTotal)) * 100); progressBar.setProgress(numPerc, 100); progressBar.label = numPerc + "%"; //progressBar.setProgress(event.bytesLoaded, event.bytesTotal); traceEvent(event); } // Called on upload io error private function onUploadIoError(event:IOErrorEvent):void { Alert.show("IO Error in uploading file.", event.text); // PopUpManager.removePopUp(_winProgress); // _winProgress == null; fileRef.cancel(); // clearUpload(); } private function completeEvent(event:DataEvent):void { progressBar.label = "Complete."; filename.text += event.data+" uploaded"; traceEvent(event); btn_upload.enabled = false; // btn_cancel.enabled = false; ta.text=event.data; } private function dataloaded(event:Event):void { var xmlResponse:XML = XML((event.target as URLLoader).data); trace(xmlResponse); ta.text=xmlResponse; } private function uploadFile():void { //var param:String = "author=" + ti_author.text; req.contentType="multipart/form-data"; //req.contentType="text/html"; //stream = new URLStream(); //alert req.method = URLRequestMethod.POST; var vars:URLVariables = new URLVariables(); // Set the data fields as appropriate vars.author = ti_author.text; // Assign the data fields to the request req.data = vars; //loader.addEventListener(Event.COMPLETE, dataloaded); //Alert.show("url"+req.requestHeaders); //loader.load(req); // stream.addEventListener(IOErrorEvent.IO_ERROR,onUploadIoError); //stream.addEventListener (Event.COMPLETE,completeEvent); //stream.addEventListener (ProgressEvent.PROGRESS,progressEvent); //try { // trace("bytes"+ stream.bytesAvailable); // stream.load(req); fileRef.upload(req); // } catch (error:Error) { // trace("Unable to load requested URL."+error.getStackTrace()); // } // btn_cancel.enabled = true; //progressBar.label = "Uploading..."; } ]]> </mx:Script> <mx:Panel id="summaryPanel" width="500" headerHeight="5" borderThickness="1"> <mx:Label text="Commercial Categories" fontWeight="bold" /> <mx:DataGrid id="myGrid" width="350" height="200" dataProvider="{a_cats}" > <mx:columns> <mx:DataGridColumn dataField="categoryId" /> <mx:DataGridColumn dataField="description" /> </mx:columns> </mx:DataGrid> <mx:Panel title="Flex 3 File Uploading Demo" width="100%" height="100%" > <mx:Form> <mx:FormItem label="Selected File:"> <mx:Label id="filename"/> </mx:FormItem> <mx:FormItem label="Upload By:"> <mx:TextInput id="ti_author" text="Baji" /> </mx:FormItem> <mx:FormItem direction="horizontal" width="100%"> <mx:Button width="80" label="Browse" click="fileRef.browse()" /> <mx:Button width="80" label="Upload" id="btn_upload" click="uploadFile()" /> <mx:Button width="80" label="Cancel" id="btn_cancel" enabled="false" click="fileRef.cancel()" /> </mx:FormItem> <mx:HRule width="100%" tabEnabled="false"/> <mx:FormItem label="Progress:"> <mx:ProgressBar id="progressBar" mode="manual" /> </mx:FormItem> <mx:FormItem label="Events:"> <mx:TextArea id="ta" width="350" height="200" /> </mx:FormItem> </mx:Form> </mx:Panel> </mx:Panel> </mx:Application> web.xml ............. <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>XFireServlet</servlet-name> <servlet- class>org.codehaus.xfire.transport.http.XFireConfigurableServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/servlet/XFireServlet/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>XFireServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> <servlet> <servlet-name>FileServlet</servlet-name> <servlet-class>com.boa.flex.servlet.UploadFileServlet</servlet- class> </servlet> <servlet-mapping> <servlet-name>FileServlet</servlet-name> <url-pattern>/action/*</url-pattern> </servlet-mapping> </web-app> ........ servlet ......... package com.boa.flex.servlet; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.HashMap; import java.util.Iterator; import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem; import org.apache.commons.fileupload.FileItemFactory; import org.apache.commons.fileupload.FileUploadException; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author nbkzk5e * */ public class UploadFileServlet extends HttpServlet { /* (non-Javadoc) * @see javax.servlet.http.HttpServlet#service (javax.servlet.http.HttpServletReques t, javax.servlet.http.HttpServletResponse) */ private static final Log log = LogFactory.getLog(UploadFileServlet.class); //@Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // TODO Auto-generated method stub super.doGet(req, resp); doPost(req,resp); } //@Override protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { log.info("am in servlet"); log.info("author"+req); File disk = null; FileItem item = null; FileItemFactory factory = new DiskFileItemFactory(); Iterator iter = null; List items = null; ServletFileUpload upload = new ServletFileUpload ( factory ); ServletOutputStream out = null; try { // Parse the incoming HTTP request // Commons takes over incoming request at this point // Get an iterator for all the data that was sent // TODO: Leverage generics log.info("am in servlet"); items = upload.parseRequest( req ); iter = items.iterator(); // Set a response content type res.setContentType( "text/xml" ); // Setup the output stream for the return XML data out = res.getOutputStream(); out.println( "<response>" ); // Iterate through the incoming request data while( iter.hasNext() ) { // Get the current item in the iteration item = ( FileItem )iter.next(); // If the current item is an HTML form field if( item.isFormField() ) { // Return an XML node with the field name and value out.println( "<field name=\"" + item.getFieldName() + "\" value=\"" + item.getString() + "\" />" ); // If the current item is file data } else { // Specify where on disk to write the file // Using a servlet init param to specify location on disk // Write the file data to disk // TODO: Place restrictions on upload data disk = new File( "C:\\"+item.getName() ); log.info("am after disk"); item.write( disk ); // Return an XML node with the file name and size (in bytes) out.println( "<file name=\"" + item.getName() + "\" size=\"" + item.getSize() + "\" />" ); } } // Close off the response XML data and stream out.println( "</response>" ); out.close(); // Rudimentary handling of any exceptions // TODO: Something useful if an error occurs } catch( FileUploadException fue ) { fue.printStackTrace(); } catch( IOException ioe ) { log.info("io error"); ioe.printStackTrace(); } catch( Exception e ) { e.printStackTrace(); } } } --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Flex India Community" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/flex_india?hl=en -~----------~----~----~----~------~----~------~--~---

