package com.example.anroidtest;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import android.os.Environment;

/**
 * This utility class provides an abstraction layer for sending multipart HTTP
 * POST requests to a web server.
 * 
 * @author www.codejava.net
 * 
 */
public class MultipartUtility {
 private final String boundary;
 private static final String LINE_FEED = "\r\n";
 private HttpURLConnection httpConn;
 private String charset;
 private OutputStream outputStream;
 private PrintWriter writer;

 /**
  * This constructor initializes a new HTTP POST request with content type is
  * set to multipart/form-data
  * 
  * @param requestURL
  * @param charset
  * @throws IOException
  */
 public MultipartUtility(String requestURL, String charset)
   throws IOException {
  this.charset = charset;

  // creates a unique boundary based on time stamp
  boundary = "-------------------------acebdf13572468";

  URL url = new URL(requestURL);
   httpC url.openConnection();
  httpConn.setUseCaches(false);
  httpConn.setDoOutput(true); // indicates POST method
  httpConn.setDoInput(true);
  httpConn.setRequestProperty("Content-Type",
    "multipart/form-data; boundary=" + boundary);
  httpConn.setRequestProperty("Authorization",
    "Basic c3Jpa2FudGgucmF2dWxhQHNob3JlZ3JwLmNvbTp0ZXN0aW5n");
  outputStream = httpConn.getOutputStream();
  writer = new PrintWriter(new OutputStreamWriter(outputStream, charset),
    true);
 }

 /**
  * Adds a form field to the request
  * 
  * @param name
  *            field name
  * @param value
  *            field value
  */
 public void addFormField(String name, String value) {
  writer.append("--" + boundary).append(LINE_FEED);
  writer.append("Content-Disposition: form-data; name=" + name).append(
    LINE_FEED);

  writer.append(LINE_FEED);
  writer.append(value);
  writer.flush();
 }

 /**
  * Adds a upload file section to the request
  * 
  * @param fieldName
  *            name attribute in <input type="file" name="..." />
  * @param uploadFile
  *            a File to be uploaded
  * @throws IOException
  */
 public void addFilePart(String fieldName, File uploadFile)
   throws IOException {
  String fileName = uploadFile.getName();
  writer.append("--" + boundary).append(LINE_FEED);
  writer.append(
    "Content-Disposition: form-data; name=" + fieldName
      + "; filename=" + fileName).append(LINE_FEED);
  writer.append("Content-Type: image/png").append(LINE_FEED);
  writer.append("Content-Transfer-Encoding: binary").append(LINE_FEED);
  writer.append(LINE_FEED);
  writer.flush();

  FileInputStream inputStream = new FileInputStream(uploadFile);
  byte[] buffer = new byte[4096];
  int bytesRead = -1;
  while ((bytesRead = inputStream.read(buffer)) != -1) {
   outputStream.write(buffer, 0, bytesRead);
  }
  outputStream.flush();
  inputStream.close();

  writer.append(LINE_FEED);
  writer.flush();
 }

 /**
  * Adds a header field to the request.
  * 
  * @param name
  *            - name of the header field
  * @param value
  *            - value of the header field
  */
 public void addHeaderField(String name, String value) {
  writer.append(name + ": " + value).append(LINE_FEED);
  writer.flush();
 }

 /**
  * Completes the request and receives response from the server.
  * 
  * @return a list of Strings as response in case the server returned status
  *         OK, otherwise an exception is thrown.
  * @throws IOException
  */
 public List<String> finish() throws IOException {
   List<String> resp ArrayList<String>();

  // writer.append(LINE_FEED).flush();
  writer.append("--" + boundary + "--").append(LINE_FEED);
  writer.flush();
  writer.close();

  try {
   File newFolder = new File&#40;
     Environment.getExternalStorageDirectory(&#41;, "TestFolder");
   if (!newFolder.exists()) {
    newFolder.mkdir();
   }
   try {
    File file = new File&#40;newFolder, "MyTest" + ".txt"&#41;;
    if (file.exists())
     file.delete();
    file.createNewFile&#40;&#41;;

    FileOutputStream fOut = new FileOutputStream(file);
    fOut.write(outputStream.toString().getBytes());
    fOut.flush();
    fOut.close();
   } catch (Exception ex) {
    System.out.println("ex: " + ex);
   }
  } catch (Exception e) {
   System.out.println("e: " + e);
  }

  // checks server's status code first
  int status = httpConn.getResponseCode();
   String reas

  if (status == HttpURLConnection.HTTP_OK) {
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     httpConn.getInputStream()));
   String line = null;
   while ((line = reader.readLine()) != null) {
    response.add(line);
   }
   reader.close();
   httpConn.disconnect();
  } else {
   ByteArrayOutputStream f = new ByteArrayOutputStream();
   f.write(outputStream.toString().getBytes());
   System.out.println("Request: " + f.toString());

   // Error message
   BufferedReader reader = new BufferedReader(new InputStreamReader(
     httpConn.getErrorStream()));
   String line = null;
   while ((line = reader.readLine()) != null) {
    System.out.println("Reason: " + line);
   }
   reader.close();

   throw new IOException("Server returned non-OK status: " + status
     + ", reason: " + reason);
  }

  return response;
 }
}

Add a code snippet to your website: www.paste.org