2014-02-13 80 views
0

如何將所有文件從SD卡發送到服務器,我可以從設備通過該 代碼推文件服務器:從android設備發送文件到服務器?

public void btnclick(View v) { 

     String pathToOurFile = "/mnt/sdcard/" + "q.3gp"; 
     String urlServer = "http://www.google.com/upload.php"; 
     String lineEnd = "\r\n"; 
     String twoHyphens = "--"; 
     String boundary = "*****"; 
     int bytesRead, bytesAvailable, bufferSize; 
     byte[] buffer; 
     int maxBufferSize = 1 * 1024 * 1024; 

     try { 

      FileInputStream fileInputStream = new FileInputStream(new File(
        pathToOurFile)); 

      URL url = new URL(urlServer); 
      connection = (HttpURLConnection) url.openConnection(); 

      // Allow Inputs & Outputs 
      connection.setDoInput(true); 
      connection.setDoOutput(true); 
      connection.setUseCaches(false); 
      connection.setRequestMethod("POST"); 
      connection.setRequestProperty("Connection", "Keep-Alive"); 
      connection.setRequestProperty("ENCTYPE", "multipart/form-data"); 
      connection.setRequestProperty("Content-Type", 
        "multipart/form-data;boundary=" + boundary); 
      connection.setRequestProperty("uploaded_file", "gopivideo"); 
      outputStream = new DataOutputStream(connection.getOutputStream()); 
      outputStream.writeBytes(twoHyphens + boundary + lineEnd); 
      outputStream 
        .writeBytes("Content-Disposition: form-data; name=\"sample\";filename=\"" 
          + pathToOurFile + "\"" + lineEnd); 
      outputStream.writeBytes(lineEnd); 

      bytesAvailable = fileInputStream.available(); 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      buffer = new byte[bufferSize]; 

      // Read file 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

      while (bytesRead > 0) { 
       outputStream.write(buffer, 0, bufferSize); 
       bytesAvailable = fileInputStream.available(); 
       bufferSize = Math.min(bytesAvailable, maxBufferSize); 
       bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
      } 

      outputStream.writeBytes(lineEnd); 
      outputStream.writeBytes(twoHyphens + boundary + twoHyphens 
        + lineEnd); 

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

      Toast.makeText(getApplicationContext(), 
        serverResponseCode + "," + serverResponseMessage, 
        Toast.LENGTH_LONG).show(); 

      fileInputStream.close(); 
      outputStream.flush(); 
      outputStream.close(); 
     } catch (Exception ex) { 
      // Exception handling 
     } 
    } 
} 

這是上傳任何類型的文件到服務器單推 但什麼是工作很酷需要循環SD卡中的所有文件並逐個發送。 謝謝

回答

0

爲此,您可以用多個部分的POST請求:(這樣,你不需要創建JSON)

HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost(serverURL); 
    MultipartEntity postEntity = new MultipartEntity(); 
    File file = new File("Your File path on SD card"); 
    postEntity.addPart("fileupload", new FileBody(file, "image/jpeg")); 
    postEntity.addPart("loginKey", new StringBody(""+loginKey)); 
    postEntity.addPart("message", new StringBody(message)); 
    postEntity.addPart("token", new StringBody(token)); 
    post.setEntity(postEntity); 
    response = client.execute(post); 

,並添加Mime4

+0

感謝您的文章,但沒有在你的代碼循環我已經使用這個我需要的是循環所有類型的文件在SD卡中,併發送或做一個接一個單一按鈕點擊我是一個初學者到Android請幫我這個。 –

+0

按字節數組可以發送文件,並且可以從服務器回收,並且必須對文件進行解碼 – Ameer

相關問題