Java – Upload image files from Android to an aspx web server

Upload image files from Android to an aspx web server… here is a solution to the problem.

Upload image files from Android to an aspx web server

I’m trying to upload the file fmarom android to a web server, using aspx on the server side,
I’m using sample code that I found at: http://www.codicode.com/art/upload_files_from_android_to_a_w.aspx
My problem is that I get this error message:
java.net.ProtocolException: The request body: POST method does not support it.

Now I’m

looking for this error message and I find that I’m having a problem on the server side,
The solution to my problem is to enable both HTTP GET and HTTP POST on the server,
By editing Web.config like this.

<configuration>
    <system.web>
    <webServices>
        <protocols>
            <add name="HttpGet"/>
            <add name="HttpPost"/>
        </protocols>
    </webServices>
    </system.web>
</configuration>

But still have the same error message in this line:

DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

Here is my class code:

HttpFileUpload.java:

package com.batyalon.tizko;

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 HttpFileUpload implements Runnable{
        URL connectURL;
        String responseString;
        String Title;
        String Description;
        byte[ ] dataToServer;
        FileInputStream fileInputStream = null;

HttpFileUpload(String urlString, String vTitle, String vDesc){
                try{
                        connectURL = new URL(urlString);
                        Title= vTitle;
                        Description = vDesc;
                }catch(Exception ex){
                    Log.i("HttpFileUpload","URL Malformatted");
                }
        }

void Send_Now(FileInputStream fStream){
                fileInputStream = fStream;
                Sending();
        }

void Sending(){
                String iFileName = "ovicam_temp_vid.mp4";
                String lineEnd = "\r\n";
                String twoHyphens = "--";
                String boundary = "*****";
                String Tag="fSnd";
                try
                {
                        Log.e(Tag,"Starting Http File Sending to URL");

 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);

The line which gives the error:
                        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

dos.writeBytes(twoHyphens + boundary + lineEnd);
                        dos.writeBytes("Content-Disposition: form-data; name=\"title\""+ lineEnd);
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(Title);
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(twoHyphens + boundary + lineEnd);

dos.writeBytes("Content-Disposition: form-data; name=\"description\""+ lineEnd);
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(Description);
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(twoHyphens + boundary + lineEnd);

dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\"" + iFileName +"\"" + 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);
                        }
                        dos.writeBytes(lineEnd);
                        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

 close streams
                        fileInputStream.close();

dos.flush();

Log.e(Tag,"File Sent, Response: "+String.valueOf(conn.getResponseCode()));

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, "URL error: " + ex.getMessage(), ex);
                }

catch (IOException ioe)
                {
                        Log.e(Tag, "IO error: " + ioe.getMessage(), ioe);
                }
        }

@Override
        public void run() {
                 TODO Auto-generated method stub
        }
}

My MainActivity code:

try {
                     Set your file path here
                    FileInputStream fstrm = new FileInputStream(Environment.getExternalStorageDirectory().toString()+ File.separator  + "bina/shruttech/3_0.png");

 Set your server page url (and the file title/description)
                    HttpFileUpload hfu = new HttpFileUpload("http://XXXX:8080/fileup.aspx", "mytitle","mydescription");

hfu. Send_Now(fstrm);

} catch (FileNotFoundException e) {
                     Error: File not found
                  }

My fileup.aspx code:

protected void Page_Init(object sender, EventArgs e)
{
  string vTitle = "";
  string vDesc = "";
  string FilePath = Server.MapPath("/files/cur_file.mp4");        

if (!string. IsNullOrEmpty(Request.Form["title"]))
  {
    vTitle = Request.Form["title"];
  }
  if (!string. IsNullOrEmpty(Request.Form["description"]))
  {
    vDesc = Request.Form["description"];
  }

HttpFileCollection MyFileCollection = Request.Files;
  if (MyFileCollection.Count > 0)
  {
     Save the File
    MyFileCollection[0]. SaveAs(FilePath);
  }
}

Thank you in advance for your help….

Solution

Related Problems and Solutions