Hi Martin and hi everyone, thank you very much for your suggestions! On the client side I use XMLHTTP because I have to upload a file but I need to control the result of the upload. The reason is that on the web container I have a class which can reply with XML containing errors which I want to handle on the client side (e.g. opening a browser window which shows the errors, I don't want to move to another page), so I've decided to upload the file programmatically in Jscript (using XMLHTTP which is the only object I know I can use to communicate with the server side). I know that this is using the browser as a thick client but that's one of my requirements.
I think I will use ServletRequest.getInputStream() and handle the body of the request, that's really what I need! Thank you very much again, Andrea > -----Messaggio originale----- > Da: Martin Cooper [mailto:[EMAIL PROTECTED] > Inviato: mercoled� 7 aprile 2004 20.33 > A: [EMAIL PROTECTED] > Oggetto: Re: NEWBIE FileUpload question > > > I've been thinking about the problems you're having, and it > seems to me that you may be using the wrong tools for the job > on both ends of the connection. > ;-) > > From a brief Google around, it seems that (not surprisingly) > XMLHTTP is intended for processing (getting and posting) XML > content. However, your content appears to be CSV (comma > separated values) data, rather than XML. In addition, you > appear to be constructing a request that contains only a > single "part", that being the content of a single file. > > If what you really need to do is upload a single file and > save it to disk on the server, here's what I would suggest. > > * On the client side, you don't really need XMLHTTP. However, > if that is the most convenient way of posting content, then > it will still work for this purpose. > > * Do not set the content type header for multipart data. > Instead, treat it as a plain post. > > * On the server side, don't use Commons FileUpload at all. > Since you don't need multipart handling, you don't need > FileUpload either. > > * Instead, just call ServletRequest.getInputStream() to get > an input stream for the body of the request - which is the > contents of the file you posted - and copy the contents of > that stream to a file on the disk. > > That seems to me to be a simpler way of doing what you need, > but of course I could be misunderstanding what you really > need to do. ;-) > > -- > Martin Cooper > > > "Giovannini Andrea" <[EMAIL PROTECTED]> wrote in > message > news:[EMAIL PROTECTED] > Hi, > I'm using FileUpload to process a file uploaded from Internet > Explorer via Jscript, there's no direct form submit but I use > the XMLHTTP object since I want control over the result. This > is my client code > > function go() { > // I skip some details > var fileName = ...; > var url = ... + "&fileName=" + fileName; > > var adoStream = new ActiveXObject("ADODB.Stream"); > adoStream.Mode = 3; > adoStream.Type = 1; > adoStream.Open(); > adoStream.LoadFromFile(fileName); > var xmlhttp = new ActiveXObject("MSXML2.XMLHTTP"); > xmlhttp.open("POST", url, false); > > var boundary = "----------This_Is_The_Boundary_\r\n"; > xmlhttp.setRequestHeader("Content-Type","multipart/form-data; > boundary=" + boundary); > xmlhttp.setRequestHeader("Content-Length", adoStream.Size); > xmlhttp.send(adoStream.Read(adoStream.Size)); > } > > Then I want to save the file on the server. In my servlet I have this > code: > > String path = ... > DiskFileUpload upload = new DiskFileUpload(); > upload.setRepositoryPath(path); > > try { > List items = upload.parseRequest(request); > Iterator iter = items.iterator(); > while (iter.hasNext()) { > FileItem item = (FileItem) iter.next(); > if (!item.isFormField()) { > fileName = item.getName(); > File uploadedFile = new File(fileName); > item.write(uploadedFile); } } } catch(Exception e) { ... } > > But the parseRequest() returns an empty list. I've debugged > the FileUpload code and the problem is that in the > discardBodyData() of the class MultipartStream a > MalformedStreamException("Stream ended > unexpectedly") is thrown and parseRequest() returns an empty > collection. So I wonder what's wrong with my uploading... Any idea? > > Thanks in advance, > Andrea > > ---------------------------------- > Andrea Giovannini > Java Software Architect > > Gruppo Formula S.p.A. > ---------------------------------- > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
