You just need to do Http-FileUpload, which in a special case is POST. No need for uuencode file. No need to use special lib / jar No need to save the object to disk (no matter what the following example does)
You will find a very good explanation of Http-Command and how your special focus is โfile downloadโ under
Using java.net.URLConnection to start and process HTTP requests
Below is an example of downloading a file (see "Send a binary file") and you can add some information about partners either
String param = "value"; File textFile = new File("/path/to/file.txt"); File binaryFile = new File("/path/to/file.bin"); String boundary = Long.toHexString(System.currentTimeMillis()); // Just generate some unique random value. String CRLF = "\r\n"; // Line separator required by multipart/form-data. URLConnection connection = new URL(url).openConnection(); connection.setDoOutput(true); connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary); PrintWriter writer = null; try { OutputStream output = connection.getOutputStream(); writer = new PrintWriter(new OutputStreamWriter(output, charset), true); // true = autoFlush, important! // Send normal param. writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"param\"").append(CRLF); writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); writer.append(CRLF); writer.append(param).append(CRLF).flush(); // Send text file. writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"textFile\"; filename=\"" + textFile.getName() + "\"").append(CRLF); writer.append("Content-Type: text/plain; charset=" + charset).append(CRLF); writer.append(CRLF).flush(); BufferedReader reader = null; try { reader = new BufferedReader(new InputStreamReader(new FileInputStream(textFile), charset)); for (String line; (line = reader.readLine()) != null;) { writer.append(line).append(CRLF); } } finally { if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} } writer.flush(); // Send binary file. writer.append("--" + boundary).append(CRLF); writer.append("Content-Disposition: form-data; name=\"binaryFile\"; filename=\"" + binaryFile.getName() + "\"").append(CRLF); writer.append("Content-Type: " + URLConnection.guessContentTypeFromName(binaryFile.getName()).append(CRLF); writer.append("Content-Transfer-Encoding: binary").append(CRLF); writer.append(CRLF).flush(); InputStream input = null; try { input = new FileInputStream(binaryFile); byte[] buffer = new byte[1024]; for (int length = 0; (length = input.read(buffer)) > 0;) { output.write(buffer, 0, length); } output.flush(); // Important! Output cannot be closed. Close of writer will close output as well. } finally { if (input != null) try { input.close(); } catch (IOException logOrIgnore) {} } writer.append(CRLF).flush(); // CRLF is important! It indicates end of binary boundary. // End of multipart/form-data. writer.append("--" + boundary + "--").append(CRLF); } finally { if (writer != null) writer.close(); }
Regarding the second part of your question. When uploading a file successfully (I use shared Apache files), it is not very important to deliver blob as an image.
Here's how to accept a file in a servlet
public void doPost(HttpServletRequest pRequest, HttpServletResponse pResponse) throws ServletException, IOException { ServletFileUpload upload = new ServletFileUpload(); try { FileItemIterator iter = upload.getItemIterator (pRequest); while (iter.hasNext()) { FileItemStream item = iter.next(); String fieldName = item.getFieldName(); InputStream stream = item.openStream(); .... stream.close(); } ...
And this code provides an image
public void doGet (HttpServletRequest pRequest, HttpServletResponse pResponse) throws IOException { try { Blob img = (Blob) entity.getProperty(propImg); pResponse.addHeader ("Content-Disposition", "attachment; filename=abc.png"); pResponse.addHeader ("Cache-Control", "max-age=120"); String enc = "image/png"; pResponse.setContentType (enc); pResponse.setContentLength (img.getBytes().length); OutputStream out = pResponse.getOutputStream (); out.write (img.getBytes()); out.close();
I hope these code snippets help answer your questions.