2012-06-16 48 views
1

我目前正在上传android中的文件。现在我想发送一些数据让说和ID与该文件上传。所以我会在服务器端处理这个ID。这是我如何上传文件。这段代码工作得很好。如何通过文件上传到服务器发送数据

下面是代码

public int uploadFile(String sourceFileUri, final String imageName) { 
    //Toast.makeText(getApplicationContext(), imageName, Toast.LENGTH_LONG).show(); 
    String upLoadServerUri = "http://www.example.com/android/fileupload.php"; 
    String fileName = sourceFileUri; 
    //Toast.makeText(getApplicationContext(), sourceFileUri, Toast.LENGTH_LONG).show(); 
    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); 
     conn.setRequestProperty("uploaded_file", fileName); 
     dos = new DataOutputStream(conn.getOutputStream()); 

     dos.writeBytes(twoHyphens + boundary + lineEnd); 
     dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""+ fileName + "\"" + 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."); 
        if(fileData(globalUID, imageName)) { 
         Toast.makeText(Camera.this, "File Upload Complete.", Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
     } 
     //close the streams // 
     fileInputStream.close(); 
     dos.flush(); 
     dos.close(); 

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

    dialog.dismiss(); 
    return serverResponseCode; 
} 
+0

你能明确这个问题吗?我不确定你想做什么,你没有做。 – DrA

+0

我想用此文件POST键/值。我该怎么做? – 2619

回答

相关问题