package apt.tutorial;

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import android.util.Log;

public class HTTPFileUploader {

URL connectURL;
String params;
String responseString;
String fileName;
byte[] dataToServer;

public HTTPFileUploader(String urlString, String params, FileInputStream stream )
{
  
  try
  {
    connectURL = new URL(urlString);
  }
  catch(Exception ex){
    Log.i("URL FORMATION","MALFORMATED URL");
  }
  this.params = params+"=";
  uploadFile(stream);
}


public void uploadFile(FileInputStream stream)
{ 
  FileInputStream fileInputStream = stream;
  String exsistingFileName = "http//:www.localhost.gpx";

  String lineEnd = "\r\n";
  String twoHyphens = "--";
  String boundary = "*****";
  String Tag="3rd";
  try
  {
    //  ------------------ CLIENT REQUEST

    Log.e(Tag,"Starting to bad things");
    // Open a HTTP connection to the URL

    HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();

    //   Allow Inputs
    conn.setDoInput(true);

    // Allow Outputs
    conn.setDoOutput(true);

    // Don't use a cached copy.
    conn.setUseCaches(false);

    // Use a post method.
    conn.setRequestMethod("POST");
    
    conn.setRequestProperty("Connection", "Keep-Alive");
    
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
    
    DataOutputStream dos = new DataOutputStream( conn.getOutputStream() );
    
    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + exsistingFileName +"\"" + lineEnd);
    dos.writeBytes(lineEnd);
  
    Log.e(Tag,"Headers are written");

    //   create a buffer of maximum size

    int bytesAvailable = fileInputStream.available();
    int maxBufferSize = 1024;
    int bufferSize = Math.min(bytesAvailable, maxBufferSize);
    byte[] buffer = new byte[bufferSize];
    
    // read file and write it into form...
    
    int bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    
    while (bytesRead > 0)
    {
      dos.write(buffer, 0, bufferSize);
      bytesAvailable = fileInputStream.available();
      bufferSize = Math.min(bytesAvailable, maxBufferSize);
      bytesRead = fileInputStream.read(buffer, 0, bufferSize);
    }
    
    // send multipart form data necesssary after file data...
    
    dos.writeBytes(lineEnd);
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
    
    // close streams
    Log.e(Tag,"File is written");
    fileInputStream.close();
    dos.flush();
    
    InputStream is = conn.getInputStream();
    // retrieve the response from server
    int ch;
    
    StringBuffer b =new StringBuffer();
    while( ( ch = is.read() ) != -1 )
    {
    b.append( (char)ch );
    }
    String s=b.toString(); 
    Log.i("Response",s);
    dos.close();
    }
    catch (MalformedURLException ex)
    {
      Log.e(Tag, "error: " + ex.getMessage(), ex);
    }
    catch (IOException ioe)
    {
      Log.e(Tag, "error: " + ioe.getMessage(), ioe);
    }
  }
}
    