Showing posts with label file uploading in Android. Show all posts
Showing posts with label file uploading in Android. Show all posts

Wednesday, September 22, 2010

Android File Upload

This is the code for upload the file from the android phone to php server.


public void upload(String fileName, String filePath, String strURL) {
        if (fileName == null || fileName.equals("")) {
            throw new RuntimeException("FileName cannot be empty");
        }
        if (filePath == null || filePath.equals("")) {
            throw new RuntimeException("FilePath cannot be empty");
        }
        if (strURL == null || strURL.equals("") && !TextValidation.isValidURL(strURL)) {
            throw new RuntimeException("Url cannot be empty");
        }
        // Get the file input stream
        FileInputStream fis = setFile(filePath);
       
        // indicator for the upload file white spaces
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        String exsistingFileName = fileName;
        try {
            // Http connection and parameter setting
            URL connectURL = new URL(strURL);
            HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setUseCaches(false);
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
           
            // Data Stream for sending file
            DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"userfile\";filename=\"" + exsistingFileName + "\"" + lineEnd);
            dos.writeBytes(lineEnd);
            int bytesAvailable = fis.available();
            int maxBufferSize = 1024 * 1024;
            int bufferSize = Math.min(bytesAvailable, maxBufferSize);
            byte[] buffer = new byte[bufferSize];
            int bytesRead = fis.read(buffer, 0, bufferSize);
           
            // output stream populate
            while (bytesRead > 0) {
                dos.write(buffer, 0, bufferSize);
                bytesAvailable = fis.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fis.read(buffer, 0, bufferSize);
            }
           
            // actual upload
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
           
            // close the input stream
            fis.close();
            // flush the data output stream
            dos.flush();
            // response received
            InputStream is = conn.getInputStream();
            int ch;
           
            StringBuffer b = new StringBuffer();
            while ((ch = is.read()) != -1) {
                b.append((char) ch);
            }
            Log.i("Response", ">" + b.toString());
        } catch (Exception ex) {
            Log.e("Exception", ">" + ex.toString());
            throw new RuntimeException("Exception: " + ex.toString());
        }
    }