user1301708
user1301708

Reputation: 191

No file being uploaded in Flex

I am trying to upload a single text file that is 1kb to the server. For whatever reason the data that I receive does not contain the file info. So FileItem.Write(file) does not work. Since FileItem says the size is 0.

I don't think this is a connection issue because I managed to receive the URLVariables. The only thing that doesn't come through is the actual file.

I followed the adobe flex guide, but it still doesn't work. (http://livedocs.adobe.com/flex/3/html/help.html?content=17_Networking_and_communications_7.html)

No errors get thrown and a event complete gets triggered.

Any suggestions?

flex 3.2 sdk Jboss server java doPost

EDIT: Added source code

CertificateUploadServlet.java

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.ListIterator;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CertificateUploadServlet extends HttpServlet {

public void init(ServletConfig config) throws ServletException {
    super.init(config);
}

public void doPost(HttpServletRequest request, HttpServletResponse response) 
{
    File disk = null;
    FileItem item = null;
    DiskFileItemFactory factory = new DiskFileItemFactory();
    ListIterator iterator = null;
    List items = null;

    Servlet FileUpload upload = new ServletFileUpload(factory);

    try
    {
        items = upload.parseRequest(request);
    }catch (FileUploadException e1)
    {
        // Oh Noes!
    }


    iterator = items.listIterator();

    while(iterator.hasNext())
    {
        item = (FileItem) iterator.next();

        if(item.isFormField())
        {

        }else
        {
            try
            {
                PrintWriter out1 = new PrintWriter(new BufferedWriter(new FileWriter("C:/Test/processUploadedFile2.txt",true)));

                out1.println("item.getContentType():\t\t "+item.getContentType());
                out1.println("item.getName:\t\t "+ item.getName());
                out1.println("item.getSize:\t\t" + item.getSize());
                out1.println("item.getString:\t\t" + item.getString());
                out1.println("item.getFieldName:\t\t"+item.getFieldName());
                out1.println("item.isInMemory:\t\t" + item.isInMemory());
                out1.println("item.toString():\t\t" + item.toString());

                out1.close();
            }
            catch(IOException e)
            {
                // oh Noes~
            }
        }
    }
}

}

dataTest.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
            layout="horizontal"
            creationComplete="init()">

    <mx:Script>
        <![CDATA[
            import flash.netFileReference;
            import mx.controls.Alert;

            private var fileRef:FileReference = new FileReference();

            private function init():void
            {
                fileRef.addEventListener(Event.SELECT, selectHandler);
                fileRef.addEventListener(Event.COMPLETE, completeHandler);
            }

            private function selectHandler(event:Event):void
            {
                Alert.show("Selected...");

                var request:URLRequest= new URLRequest("https://localhost/scm/uploadServlet");
                fileRef.upload(request);
            }

            private function completeHandler(event:Event):void
            {
                Alert.show("File got uploaded");
            }
            ]]>
    </mx:Script>

    <mx:Button id="mBrowseButton" label="browse..." click="fileRef.browse()" />
</mx:Application>

item.getName: returns the correct file name that I want to upload

but item.getSize always returns 0 and thus when I try to write the file on the server it is always empty.

More info:

I am able to add variables to URLVariables class and retrieve it in the java class. The only problem is that the file does not get transferred.

Output:

Single file upload test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.toString():        name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000000.tmp, size=10bytes, isFormField=true, FieldName=Filename
item name: Filename value: Cookie.txt
item.toString():        name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000001.tmp, size=0bytes, isFormField=false, FieldName=Filedata
item.getName() :         Cookie.txt
item.getContentType():       application/octet-stream
item.getSize:        0
item.getString:      
item.getFieldName:       Filedata
item.isInMemory:         true
item.toString():         name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000001.tmp, size=0bytes, isFormField=false, FieldName=Filedata
item name: Upload   value: Submit Query

Multifile upload test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.toString():        name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000003.tmp, size=10bytes, isFormField=true, FieldName=Filename
item name: Filename value: Cookie.txt
item.toString():        name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000004.tmp, size=0bytes, isFormField=false, FieldName=Filedata

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.toString():        name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000006.tmp, size=10bytes, isFormField=true, FieldName=Filename
item name: Filename value: doPost.txt
item.toString():        name=doPost.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000007.tmp, size=0bytes, isFormField=false, FieldName=Filedata


Single file upload test
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.toString():        name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000010.tmp, size=0bytes, isFormField=false, FieldName=Filedata
item name: Filename value: Cookie.txt
item.getName() :         Cookie.txt
item.getContentType():       application/octet-stream
item.getSize:        0
item.getString:      
item.getFieldName:       Filedata
item.isInMemory:         true
item.toString():         name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\work\jboss.web\localhost\scm\upload_76556a96_14064a51ded__7ffa_00000010.tmp, size=0bytes, isFormField=false, FieldName=Filedata
item name: Upload   value: Submit Query

Edit: More info. Following output came from user c.s code. I can't figure out why it still doesn't let me show the info when I do it the way it was documented.

accept:text/*
content-type:multipart/form-data; boundary=----------ae0ae0ae0GI3ae0GI3ae0Ij5gL6cH2
user-agent:Shockwave Flash
host:localhost
content-length:1019
connection:Keep-Alive
cache-control:no-cache
cookie:JSESSIONID=BE2BF803041A7324CAF21445F6F3389C

------------ae0ae0ae0GI3ae0GI3ae0Ij5gL6cH2
Content-Disposition: form-data; name="Filename"

Cookie.txt
------------ae0ae0ae0GI3ae0GI3ae0Ij5gL6cH2
Content-Disposition: form-data; name="Filedata"; filename="Cookie.txt"
Content-Type: application/octet-stream

en.wikipedia.org    FALSE   /   FALSE   0   BCSI-CS-1b3dbb382aea0366    2
en.wikipedia.org    FALSE   /   FALSE   1404323604  centralnotice_bannercount_fr12  1
en.wikipedia.org    FALSE   /   FALSE   1374590485  centralnotice_bucket    0-4.2
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%4011-tracking 11%3Aignore
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%405-links 5%3AX
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%406-form  6%3A6
en.wikipedia.org    FALSE   /   FALSE   0   uls-previous-languages  %5B%22en%22%5D
------------ae0ae0ae0GI3ae0GI3ae0Ij5gL6cH2
Content-Disposition: form-data; name="Upload"

Submit Query
------------ae0ae0ae0GI3ae0GI3ae0Ij5gL6cH2--

// dumpRequest = false output

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   10
item.getString: Cookie.txt
item.getFieldName:  Filename
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__272408b1_140738428eb__7ffa_00000006.tmp, size=10bytes, isFormField=true, FieldName=Filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   application/octet-stream
item.getName:   Cookie.txt
item.getSize:   0
item.getString: 
item.getFieldName:  Filedata
item.isFormField:   false
item.isInMemory:    true
item.toString():    name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__272408b1_140738428eb__7ffa_00000007.tmp, size=0bytes, isFormField=false, FieldName=Filedata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   12
item.getString: Submit Query
item.getFieldName:  Upload
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__272408b1_140738428eb__7ffa_00000008.tmp, size=12bytes, isFormField=true, FieldName=Upload

More information:

Version information

Apache Maven: 2.2.1
Java version: 1.6.0_39
fileupload: 1.2
Commons-IO: 1.4
Internet Explorer: 8.0.7601.17514
Flash Player: 11.8.800.94

More output information. First attempt is using cookie.txt while the second is test.txt

#########################True/True
------------GI3gL6Ef1GI3cH2KM7ei4cH2gL6ei4
Content-Disposition: form-data; name="Filename"

Cookie.txt
------------GI3gL6Ef1GI3cH2KM7ei4cH2gL6ei4
Content-Disposition: form-data; name="Filedata"; filename="Cookie.txt"
Content-Type: application/octet-stream

en.wikipedia.org    FALSE   /   FALSE   0   BCSI-CS-1b3dbb382aea0366    2
en.wikipedia.org    FALSE   /   FALSE   1404323604  centralnotice_bannercount_fr12  1
en.wikipedia.org    FALSE   /   FALSE   1374590485  centralnotice_bucket    0-4.2
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%4011-tracking 11%3Aignore
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%405-links 5%3AX
en.wikipedia.org    FALSE   /   FALSE   1373131359  mediaWiki.user.bucket%3Aext.articleFeedbackv5%406-form  6%3A6
en.wikipedia.org    FALSE   /   FALSE   0   uls-previous-languages  %5B%22en%22%5D
------------GI3gL6Ef1GI3cH2KM7ei4cH2gL6ei4
Content-Disposition: form-data; name="Upload"

Submit Query
------------GI3gL6Ef1GI3cH2KM7ei4cH2gL6ei4--
#########################True/True
------------gL6GI3Ij5Ef1ei4Ef1ae0ei4Ef1gL6
Content-Disposition: form-data; name="Filename"

Test.txt
------------gL6GI3Ij5Ef1ei4Ef1ae0ei4Ef1gL6
Content-Disposition: form-data; name="Filedata"; filename="Test.txt"
Content-Type: application/octet-stream

This is text found instead Test.txt
------------gL6GI3Ij5Ef1ei4Ef1ae0ei4Ef1gL6
Content-Disposition: form-data; name="Upload"

Submit Query
------------gL6GI3Ij5Ef1ei4Ef1ae0ei4Ef1gL6--

#########################False/True
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   10
item.getString: Cookie.txt
item.getFieldName:  Filename
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__32478800_14078614409__7ffa_00000000.tmp, size=10bytes, isFormField=true, FieldName=Filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   application/octet-stream
item.getName:   Cookie.txt
item.getSize:   0
item.getString: 
item.getFieldName:  Filedata
item.isFormField:   false
item.isInMemory:    true
item.toString():    name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__32478800_14078614409__7ffa_00000001.tmp, size=0bytes, isFormField=false, FieldName=Filedata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   12
item.getString: Submit Query
item.getFieldName:  Upload
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload__32478800_14078614409__7ffa_00000002.tmp, size=12bytes, isFormField=true, FieldName=Upload
#########################False/True
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   8
item.getString: Test.txt
item.getFieldName:  Filename
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_6fd3dea8_140789cbb78__7ffa_00000003.tmp, size=8bytes, isFormField=true, FieldName=Filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   application/octet-stream
item.getName:   Test.txt
item.getSize:   0
item.getString: 
item.getFieldName:  Filedata
item.isFormField:   false
item.isInMemory:    true
item.toString():    name=Test.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_6fd3dea8_140789cbb78__7ffa_00000004.tmp, size=0bytes, isFormField=false, FieldName=Filedata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   12
item.getString: Submit Query
item.getFieldName:  Upload
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_6fd3dea8_140789cbb78__7ffa_00000005.tmp, size=12bytes, isFormField=true, FieldName=Upload


#########################True/False
[accept:text/*
content-type:multipart/form-data; boundary=----------Ij5KM7ae0Ef1GI3ei4ei4gL6GI3ei4
user-agent:Shockwave Flash
host:localhost
content-length:1019
connection:Keep-Alive
cache-control:no-cache
cookie:JSESSIONID=C8FF29BF4253B2E9B9EEF3360F83EB74
]
#########################True/False
[accept:text/*
content-type:multipart/form-data; boundary=----------GI3cH2ei4KM7ei4GI3GI3KM7gL6ae0
user-agent:Shockwave Flash
host:localhost
content-length:449
connection:Keep-Alive
cache-control:no-cache
cookie:JSESSIONID=B4D506EF25DA8FD0D5B11DBA98B2B21D
]

#########################False/False
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   10
item.getString: Cookie.txt
item.getFieldName:  Filename
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_50024124_140787caa99__7ffa_00000000.tmp, size=10bytes, isFormField=true, FieldName=Filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   application/octet-stream
item.getName:   Cookie.txt
item.getSize:   0
item.getString: 
item.getFieldName:  Filedata
item.isFormField:   false
item.isInMemory:    true
item.toString():    name=Cookie.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_50024124_140787caa99__7ffa_00000001.tmp, size=0bytes, isFormField=false, FieldName=Filedata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   12
item.getString: Submit Query
item.getFieldName:  Upload
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_50024124_140787caa99__7ffa_00000002.tmp, size=12bytes, isFormField=true, FieldName=Upload
#########################False/False
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   8
item.getString: Test.txt
item.getFieldName:  Filename
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_c1b3312_14078bd7c03__7ffa_00000000.tmp, size=8bytes, isFormField=true, FieldName=Filename
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   application/octet-stream
item.getName:   Test.txt
item.getSize:   0
item.getString: 
item.getFieldName:  Filedata
item.isFormField:   false
item.isInMemory:    true
item.toString():    name=Test.txt, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_c1b3312_14078bd7c03__7ffa_00000001.tmp, size=0bytes, isFormField=false, FieldName=Filedata
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
item.getContentType():   null
item.getName:   null
item.getSize:   12
item.getString: Submit Query
item.getFieldName:  Upload
item.isFormField:   true
item.isInMemory:    true
item.toString():    name=null, StoreLocation=C:\test\jboss-eap-5.1\jboss-as\server\test\tmp\upload_c1b3312_14078bd7c03__7ffa_00000002.tmp, size=12bytes, isFormField=true, FieldName=Upload

Upvotes: 3

Views: 929

Answers (2)

user1301708
user1301708

Reputation: 191

The problem with the file being read/uploaded was that fileupload-1.2 did not read the data correctly. Fileupload-1.3 was able to read the uploaded format correctly though. So there was some bug between flex and fileupload-1.2

Upvotes: 0

c.s.
c.s.

Reputation: 4826

First, please check that the files you are uploading are the ones you think they are and that they do not have an empty content.

Second, please use the servlet code below and run your example for both http and https protocols. You can change the variable dumpRequest to false to print information for your FileItems found similar to the one you have.

public class UploadServlet extends HttpServlet {

    private boolean dumpRequest = true;
    private boolean saveToFile = true;
    private String fileName = "requestBody.txt";

    @Override
    public void init() {
        log("Upload servlet initialized");
    }

    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
        try {

            log("Servicing new request...");


            if (dumpRequest) {

                dumpRequestBody(request, response);

            } else {
                Writer writer = new OutputStreamWriter( response.getOutputStream() );

                FileItem item = null;
                DiskFileItemFactory factory = new DiskFileItemFactory();

                ServletFileUpload upload = new ServletFileUpload(factory);

                List<?>items = upload.parseRequest(request);

                ListIterator<?> iterator = items.listIterator();


                while (iterator.hasNext()) {
                    item = (FileItem) iterator.next();

                    writer.write("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");

                    writer.write("item.getContentType():\t " + item.getContentType() + "\n");
                    writer.write("item.getName:\t" + item.getName() + "\n");
                    writer.write("item.getSize:\t" + item.getSize() + "\n");
                    writer.write("item.getString:\t" + item.getString() + "\n");
                    writer.write("item.getFieldName:\t" + item.getFieldName() + "\n");
                    writer.write("item.isFormField:\t" + item.isFormField() + "\n");
                    writer.write("item.isInMemory:\t" + item.isInMemory() + "\n");
                    writer.write("item.toString():\t" + item.toString() + "\n");
                    writer.flush();

                }
                writer.close();
            }

        } catch(Exception e) {
            throw new RuntimeException(e);
        }
    }


    private void dumpRequestBody(HttpServletRequest request, HttpServletResponse response) throws IOException {
        OutputStream responseOut = response.getOutputStream();
        InputStream in = request.getInputStream();

        if (!saveToFile) {
            dumpHeaders(request, responseOut);
            dumpStream(in, responseOut);
        } else {
            File file = new File(fileName);
            FileOutputStream out = new FileOutputStream(file);

            dumpStream(in, out);
            out.close();

            Writer writer = new OutputStreamWriter(responseOut);
            writer.write("Response body was saved to file: " + file.getAbsolutePath());
            writer.close();
        }
        in.close();
        responseOut.flush();
        responseOut.close();
    }

    private void dumpHeaders(HttpServletRequest request, OutputStream out) throws IOException {
        Writer writer = new OutputStreamWriter(out);
        writer.write("[");

        // first dump headers
        Enumeration<String> allHeaders = request.getHeaderNames();
        while (allHeaders.hasMoreElements()) {
            String header = allHeaders.nextElement();
            String value = request.getHeader(header);
            writer.write(header + ":" + value + "\n");
        }
        writer.write("]");
        writer.flush();
    }

    private void dumpStream(InputStream in, OutputStream out) throws IOException {
        byte[] buffer = new byte[2 * 1024];
        int bytesRead = 0;
        while ((bytesRead = in.read(buffer)) != -1) {
            out.write(buffer, 0, bytesRead);
        }
        out.flush();
    }
}

The above servlet when running for http and a file named test.txt which contains a simple line of text Test data which is uploaded via a simple html page produces the dump below. Compare the outputs you get (please also update your question with those outputs) with the one below to be able to further troubleshoot this issue.

[host:localhost:8080
user-agent:Mozilla/5.0 (Windows NT 6.0; rv:22.0) Gecko/20100101 Firefox/22.0
accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
accept-language:el-gr,el;q=0.8,en-us;q=0.5,en;q=0.3
accept-encoding:gzip, deflate
referer:http://localhost:8080/upload/upload.html
connection:keep-alive
content-type:multipart/form-data; boundary=---------------------------5118710224663
content-length:298
]-----------------------------5118710224663
Content-Disposition: form-data; name="myfile"; filename="test.txt"
Content-Type: text/plain

Test data
-----------------------------5118710224663
Content-Disposition: form-data; name="submit"

Submit
-----------------------------5118710224663--

Update 1: Servlet code and output updated. The new servlet has the option of writing the request body to a file. Please run twice with dumpRequest = true, saveToFile = false to see the result on the response and update your output in the question and once using true for both, to save the request body in a file. Please upload that file somewhere.

As seen from the first output of the UploadServlet the file data exist in the request body but they are not parsed correctly by commons file upload. You are either hitting a bug (it wouldn't be the first time that commons upload and Flash don't play nice together) if you are using the newest versions (i.e. commons-fileupload: 1.3, commons-io: 2.4) or if you are using an older version you are hitting that bug or a side effect of it.

Because the most possible cause is that there is something wrong with the line changes Flash uses, or the way it writes the boundary. Anyway it would be great if you could upload a file with the response body generated as described above and also please mention your versions for: commons-fileupload, commons-io, Flash player, Browser you are using for your scenario.


Update 2: Unfortunately I was not able to reproduce your situation using the request's body from the file you provided. While it seems that Flash does not create a strictly valid request (it does not add an extra \r\n at the end of the file) I could upload this request normally with both commons-file-upload 1.2 and 1.3 so I have run out of ideas.

The last thing that I suggest is to try to upload a file from a browser using the simple html page below. Put this file in the root of your web application and upload your file Cookie.txt (make sure the action in the form points to the upload servlet). If this does not work then the problem lies on the commons-file-upload side though I can't imagine what it might be. Keeping an eye in the server logs (perhaps an exception is shallowed somewhere?) can't hurt either.

The only safe bet that would reveal your problem, is to download the sources of commons-file-upload, put it in your project instead of using it as a dependency and debug. Since the problem occurs every time in your case, it shouldn't be too difficult to find it.

Upload html:

<html>
<body>

<form action="/scm/uploadServlet" method="post" enctype="multipart/form-data">

  <label for="file">Filename:</label><br/>
  <input type="file" name="myfile" id="file"><br/>
  <input type="submit" name="submit" value="Submit">
</form>

</body>
</html>

Upvotes: 1

Related Questions