2

I wanted to upload images from my sd card to the folder in a server. I have the following informations http://mywebsite.myworks.com/parent/webservices/myuploader.ashx (POST)

Content-Disposition: form-data; name="Filename"
FilName.jpg

Content-Disposition: form-data; name="password"
mypassword

Content-Disposition: form-data; name="action"
upload

Content-Disposition: form-data; name="parentNodeId"
1297

Content-Disposition: form-data; name="replaceExisting"
0

Content-Disposition: form-data; name="username"
admin

Content-Disposition: form-data; name="Filedata"; filename="2012-11-07 11-03-37.jpg"
Content-Type: application/octet-stream
[DATA]

Basically what i want is to upload image to the folder.What i have understood so far is to upload to the folder whose parentNodeId is 1297. I saw some tutorials on how to upload images to php server .Based on that i wrote a function. Im sharing it below

private void doFileUpload() {
    HttpURLConnection conn = null;
    DataOutputStream dos = null;
    DataInputStream inStream = null;
    String exsistingFileName = "/sdcard/r.jpg";

    // Is this the place are you doing something wrong.
    String lineEnd = "rn";
    String twoHyphens = "--";
    String boundary = "*****";

    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;
    String responseFromServer = "";
    String urlString = "http://mywebsite.myworks.com/parent/webservices/myuploader.ashx";

    try {
        // ------------------ CLIENT REQUEST
        Log.e("UploadMe", "Inside second Method");
        FileInputStream fileInputStream = new FileInputStream(new File(exsistingFileName));

        // open a URL connection to the Servlet
        URL url = new URL(urlString);

        // Open a HTTP connection to the URL
        conn = (HttpURLConnection) url.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);
        conn.setRequestProperty("Content-Type", "application/octet-stream");

        dos = new DataOutputStream(conn.getOutputStream());
        dos.writeBytes(twoHyphens + boundary + lineEnd);
         dos.writeBytes("Content-Disposition: form-data; name=\"Filename\";filename=\""
         + exsistingFileName + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"Filename\";filename=\""
                + "r.jpg" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"password\";filename=\""
                + "mypassword" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"action\";filename=\""
                + "upload" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"parentNodeId\";filename=\""
                + "-1" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"replaceExisting\";filename=\""
                + "0" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"username\";filename=\""
                + "admin" + "\"" + lineEnd);
        dos.writeBytes("Content-Disposition: form-data; name=\"Filedata\";filename=\""
                + "2012-11-07 11-03-37.jpg" + "\"" + lineEnd);

        dos.writeBytes(twoHyphens + boundary + lineEnd);

        dos.writeBytes(lineEnd);
        Log.e("UploadMe", "Headers are written");

        // create a buffer of maximum size
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];

        // read file and write it into form...
        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("UploadMe", "File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();

    }

    catch (MalformedURLException ex)

    {

        Log.e("UploadMe", "error: " + ex.getMessage(), ex);

    }

    catch (IOException ioe)

    {

        Log.e("UploadMe", "error: " + ioe.getMessage(), ioe);

    }

    // ------------------ read the SERVER RESPONSE
    try {
        inStream = new DataInputStream(conn.getInputStream());
        String str;

        while ((str = inStream.readLine()) != null) {
            Log.e("UploadMe", "Server Response" + str);
        }

        inStream.close();
    }

    catch (IOException ioex) {
        Log.e("UploadMe", "error: " + ioex.getMessage(), ioex);
    }

}

The program runs with out any crash and im getting these from my log cat output.But i couldnot see anything in my server folder.

11-22 10:26:39.546: E/UploadMe(3363): Inside second Method
11-22 10:26:39.843: E/UploadMe(3363): Headers are written
11-22 10:26:39.851: E/UploadMe(3363): File is written
11-22 10:26:40.820: E/UploadMe(3363): Server Response<?xml version="1.0"?>
11-22 10:26:40.820: E/UploadMe(3363): Server Response<MediaResponse xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" success="false" />

Since i have no idea about uploading files to server , Is this the way to upload files?

playmaker420
  • 1,527
  • 4
  • 27
  • 52

2 Answers2

1

See this

link how to Upload image into server in Android?

In this example they want to same as you upload image on server but store in folder is your web service developer's task where he actually storing the image.

You task is only send a image to server.

Community
  • 1
  • 1
Chintan Khetiya
  • 15,962
  • 9
  • 47
  • 85
1

One lib was available call android-async-http-1.4.2.jar using this you can upload file with post string data also

here is the example code

RequestParams params = new RequestParams();
params.put("fname", "name");// here write your parameter name and its value
params.put("file", new File(filePath)); // Upload a File
// params.put("profile_picture2", someInputStream); // Upload an
// InputStream
// params.put("profile_picture3", new ByteArrayInputStream(someBytes));
// // Upload some bytes

AsyncHttpClient client = new AsyncHttpClient();
client.post(urlServer, params, new AsyncHttpResponseHandler() {
    @Override
    public void onSuccess(String arg0) {
        super.onSuccess(arg0);
        Log.v("from response", arg0);
    }
});

here is jar download link

https://github.com/loopj/android-async-http/downloads

Pratik
  • 30,639
  • 18
  • 84
  • 159