将图像沿文本发送到android中的服务器

时间:2012-11-30 12:24:38

标签: android image

HttpURLConnection conn = null;
DataOutputStream dos = null;
String lineEnd = "\r\n";
String twoHyphens = "--";
String boundary = "*****";
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = 1 * 1024 * 1024;
File sourceFile = new File(sourceFileUri);
if (!sourceFile.isFile()) {
    Log.e("uploadFile", "Source File Does not exist");
    return 0;
}
try { // open a URL connection to the Servlet
    FileInputStream fileInputStream = new FileInputStream(sourceFile);
    URL url = new URL(upLoadServerUri);
    conn = (HttpURLConnection) url.openConnection(); // Open a HTTP  connection to  the URL
    conn.setDoInput(true); // Allow Inputs
    conn.setDoOutput(true); // Allow Outputs
    conn.setUseCaches(false); // Don't use a Cached Copy
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Connection", "Keep-Alive");
    conn.setRequestProperty("ENCTYPE", "multipart/form-data");
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);

    // text to send

    conn.setRequestProperty("uploaded_file", fileName);

    String stringFieldName = "user_id";

    conn.setRequestProperty("user_id", "999");

    conn.setRequestProperty("sb_name", "testinggg");

    Log.e("fileName", "fileName     ======="+fileName);
    dos = new DataOutputStream(conn.getOutputStream());
    Log.e("uploadFile_uploadFile", "twoHyphens ="+twoHyphens +", boundary ="+boundary+", lineEnd ="+lineEnd);
    dos.writeBytes(twoHyphens + boundary + lineEnd);

    Random r = new Random();
    int rnd_filename = r.nextInt(999) + 1;
    String strFileName="";
    strFileName =rnd_filename +".png";

    Log.e("strFileName", "strFileName     ======="+strFileName);
    // dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ strFileName + "\"" + lineEnd);

    dos.writeBytes("Content-Disposition: form-data; name=\"" + stringFieldName + "\""+ lineEnd);

    dos.writeBytes(lineEnd);               

    bytesAvailable = fileInputStream.available(); // create a buffer of  maximum size

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

    // Responses from the server (code and message)
    serverResponseCode = conn.getResponseCode();
    String serverResponseMessage = conn.getResponseMessage();

    Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);
    if(serverResponseCode == 200){
        runOnUiThread(new Runnable() {
            public void run() {
                tv.setText("File Upload Completed.");
                Toast.makeText(UploadImageDemo.this, "File Upload Complete.", Toast.LENGTH_SHORT).show();
            }
        });
    }   

    //close the streams //
    fileInputStream.close();
    dos.flush();
    dos.close();

} catch (MalformedURLException ex) {
    System.out.println("catch MalformedURLException ");
    System.out.println("catch MalformedURLException ex ="+ex);
    dialog.dismiss();
    ex.printStackTrace();
    Toast.makeText(UploadImageDemo.this, "MalformedURLException", Toast.LENGTH_SHORT).show();
    Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
} catch (Exception e) {
    System.out.println("catch Exception ");
    System.out.println("catch Exception ex ="+e);
    dialog.dismiss();
    e.printStackTrace();
    Toast.makeText(UploadImageDemo.this, "Exception : " + e.getMessage(), Toast.LENGTH_SHORT).show();
    Log.e("Upload file to server Exception", "Exception : " + e.getMessage(), e);
}

try {
    BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    String line;
    while ((line = rd.readLine()) != null) {
        System.out.println("RESULT Message: " + line);
    }
    rd.close();
} catch (IOException ioex) {
    Log.e("Huzza", "error: " + ioex.getMessage(), ioex);
}

dialog.dismiss();
System.out.println("uploadFile END");
return serverResponseCode;
}

我想将图像和文本上传到服务器。我可以将图像发送到服务器但无法在服务器上发送文本。

2 个答案:

答案 0 :(得分:0)

这样我就做了并且正在工作

 //text with the image
                   dos.writeBytes(twoHyphens + boundary + lineEnd);
                   dos.writeBytes("Content-Disposition: form-data; name=text" + lineEnd); // GET text in PHP side
                   dos.writeBytes(lineEnd);
                   dos.writeBytes(UserPost); // mobile_no is String variable
                   dos.writeBytes(lineEnd);

                   //Username with image
                   dos.writeBytes(twoHyphens + boundary + lineEnd);
                   dos.writeBytes("Content-Disposition: form-data; name=usr" + lineEnd); // GET usr in PHP side
                   dos.writeBytes(lineEnd);
                   dos.writeBytes(name); 
                   dos.writeBytes(lineEnd);

答案 1 :(得分:0)

将文本和图像发送到服务器是一项简单的任务。只需将图像转换为字符串并随文本一起发送..

  Bitmap bitmap = BitmapFactory.decodeFile(fileUri);

   ByteArrayOutputStream stream = new ByteArrayOutputStream();

   bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);


   byte[]  byteArray= stream.toByteArray();
   String  imageString= Base64.encode(byteArray);

如需更多参考,请点击此处。http://androiddhina.blogspot.in/p/androidhints.html