The usual mechanism for uploading files is to use the POST method with an encoding type of "multipart/form-data". HttpClient will help you with sending the data this way, and Commons FileUpload will help you with accessing it from within your servlet.
-- Martin Cooper > -----Original Message----- > From: Daniel Walsh [mailto:[EMAIL PROTECTED]] > Sent: Wednesday, February 12, 2003 9:41 PM > To: Commons HttpClient Project > Subject: File Upload > > > I'm trying to use HttpClient's PutMethod to transfer a file > from my client application to the associated Servlet. There > isn't actually a UI for this application, in the end I want > to automate the process. I'm not sure if there is a better > way of doing a file upload such as this, but what I've been > trying to do uses a couple of requests to the Servlet to > implement the entire file transfer: > > 1. First, the client uses a POST method to send the file > name (contained in a parameter) to be transferred to the servlet. > > 2. The servlet then takes the file name and sets an attribute > on the HttpSession object associated with the client to be > the name of the transferring file. > > 3. The client then uses a PUT method (via HttpClient's > PutMethod object) to transfer the file contents. > > 4. The servlet reads the contents into a byte array, and > extracts the file name from the associated session object. > > 5. Finally the servlet creates a file with the extracted > name, opens a FileOutputStream and writes the contents to the > newly created file. > > I've never actually seen something like this done, but it > seemed logical enough... right (these words always seem to > mean trouble!)? So, does anyone know what it is that I could > be doing wrong? The file name comes through fine and the > Servlet creates the new file with the corresponding name > without a problem. The file even ends up with the > appropriate size. The problem is that when I take a look at > the newly created file, it just holds spaces in place of the > original text. > > Thanks, > > Daniel > > > > I've tried to put together a digest version of what I'm > trying to do... > > -------------------------------------------------------------- > ---------------------------------------------- > Client Class: > -------------------------------------------------------------- > ---------------------------------------------- > > public class FileUploadClient > { > public static void main(String args[]) > { > try > { > java.net.URL serverUrl = new > java.net.URL("http://localhost:8081/upload"); > File uploadFile = new File("C:\\Temp\\UploadFile.txt"); > > PostMethod post = new PostMethod(); > post.setPath(serverUrl.getPath()); > post.addParameter("file-name", uploadFile.getName()); > > HttpClient client = new HttpClient(); > HostConfiguration hostConfig = new HostConfiguration(); > > hostConfig.setHost(serverUrl.getHost(), > serverUrl.getPort(), serverUrl.getProtocol()); > client.setConnectionTimeout(30000); > client.setHostConfiguration(hostConfig); > > client.executeMethod(post); > > String fileToUpload = post.getResponseBodyAsString(); > > PutMethod put = new PutMethod(); > put.setPath(serverUrl.getPath()); > put.setRequestBody(uploadFile); > > client.executeMethod(put); > } > catch(Exception ex) > { > ex.printStackTrace(); > } > finally > { > System.out.println("Finished Transfer.."); > } > } > } > > > -------------------------------------------------------------- > ---------------------------------------------- > Servlet Class: > -------------------------------------------------------------- > ---------------------------------------------- > > public class FileUploadServlet extends HttpServlet > { > public void doPost(HttpServletRequest req, > HttpServletResponse res) throws IOException, ServletException > { > HttpSession session = req.getSession(true); > > String fileName = req.getParameter("file-name"); > session.setAttribute("file-name", fileName); > > PrintWriter out = res.getWriter(); > out.println(fileName); > out.flush(); > out.close(); > } > > public void doPut(HttpServletRequest req, > HttpServletResponse res) throws IOException, ServletException > { > HttpSession session = req.getSession(false); > String fileName = (String)session.getAttribute("file-name"); > > File uploadedFile = new File(fileName); > uploadedFile.createNewFile(); > > ServletInputStream in = req.getInputStream(); > byte[] reqContent; > int contentLength = 0; > > while(in.read() != -1) > ++contentLength; > > reqContent = new byte[contentLength]; > > in.read(reqContent); > > FileOutputStream fOut = new FileOutputStream(uploadedFile); > fOut.write(reqContent); > fOut.flush(); > fOut.close(); > } > } > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]