2014-01-09 3 views
1

웹 서비스에 파일을 여러 개 게시하려고했습니다. 그러나, 하나의 파일 포스트가 작동하지 않는 여러 파일 포스트를 작업합니다.Android 포스트 파일 배열

도와주세요. 해당 기능을 구현하는 방법.

아래 코드를 시도했습니다. 그것을 확인하십시오.

 file=>[{"1" => "File" },{"2" => "File"}..] 

같은 당신이 파일 바디의 배열을 전달하려면, 당신이 좋아하는 시도 할 수

String fileName = sourceFileUri; 
String fileName1 = sourceFileUri1;  
// fileName1 - how to post to web service 

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()) { 
     dialog.dismiss(); 
     Log.e("uploadFile", "Source File not exist :" + imagepath); 
     runOnUiThread(new Runnable() { 
      public void run() { 
       messageText.setText("Source File not exist :" + imagepath); 
      } 
     }); 
     return 0; 
    } else { 
     try { 
      // open a URL connection to the Servlet 
      URL url = new URL(upLoadServerUri); 

      // Open a HTTP connection to the URL 
      conn = (HttpURLConnection) url.openConnection(); 
      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); 

      FileInputStream fileInputStream = new FileInputStream(
        sourceFile); 
      // create a buffer of maximum size 
      bytesAvailable = fileInputStream.available(); 
      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); 

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

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

     } catch (MalformedURLException ex) { 

      dialog.dismiss(); 
      ex.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText 
          .setText("MalformedURLException Exception : check script url."); 
        Toast.makeText(MainActivity.this, 
          "MalformedURLException", Toast.LENGTH_SHORT) 
          .show(); 
       } 
      }); 

      Log.e("Upload file to server", "error: " + ex.getMessage(), ex); 
     } catch (Exception e) { 

      dialog.dismiss(); 
      e.printStackTrace(); 

      runOnUiThread(new Runnable() { 
       public void run() { 
        messageText.setText("Got Exception : see logcat "); 
        Toast.makeText(MainActivity.this, 
          "Got Exception : see logcat ", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      Log.e("Upload file to server Exception", 
        "Exception : " + e.getMessage(), e); 
     } 
     dialog.dismiss(); 
     return serverResponseCode; 

    } 

답변

1

해결책이 있습니다. 나는 아래와 같이 사용했다. 효과가 있습니다. ""(파일 이름을

public void uploadFileNew(ArrayList<String>IMAGEPTHLIST, ArrayList<String>IMAGENAMELIST) { 
     try { 
      HttpClient httpClient = new DefaultHttpClient(); 
      HttpPost postRequest = new HttpPost(upLoadServerUri); 
      ByteArrayBody bab; 
      ByteArrayOutputStream bos; 
      Bitmap bm; 
      MultipartEntity reqEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); 
      for(int i = 0 ; i< IMAGEPTHLIST.size() ; i++) { 
       bm = BitmapFactory.decodeFile(IMAGEPTHLIST.get(i)); 
       bos = new ByteArrayOutputStream(); 
        bm.compress(CompressFormat.PNG, 100, bos); 
        byte[] data = bos.toByteArray(); 
       bab = new ByteArrayBody(data, IMAGENAMELIST.get(i));      
       reqEntity.addPart("file["+i+"]", bab); 
      } 
      reqEntity.addPart("cat_id", new StringBody("123")); 
      reqEntity.addPart("name", new StringBody("Android test")); 
      postRequest.setEntity(reqEntity);       
      HttpResponse response2 = httpClient.execute(postRequest);       
      BufferedReader reader = new BufferedReader(new InputStreamReader(response2.getEntity().getContent(), "UTF-8")); 

      String sResponse; 
      StringBuilder s = new StringBuilder(); 

      while ((sResponse = reader.readLine()) != null) { 
       s = s.append(sResponse); 
      } 
      System.out.println("===="+s.toString());   
     } catch (Exception e) { 
      e.printStackTrace(); 
     }   
     dialog.dismiss(); 
    } 
0

,

 reqEntity.addPart("file[]["+i+"]", bab); 

이 생성됩니다 PARAMS은 당신의 의심을 명확히 바랍니다.

+0

하이 바라 스 회신 덕분에,하지만 내가 필요로하는 것은 conn.setRequestProperty은 "[] uploaded_file);"입니다 여기에 하나 이상의 파일을 추가하는 방법. "fileName"은 문자열입니다. "setRequestProperty"배열을 허용하지 않습니다. 가능한 경우 여기에 파일을 추가하십시오. – Karthikeyan