2012-09-26 3 views
2

네트워크를 통해 상황에 따라 하나 이상의 파일을 전송해야하는 시나리오가 있습니다. 파일 크기는 700KB에서 900KB 사이입니다. 업로드가 완료되면 서버는 업로드 된 파일의 수와 관계없이 하나의 번호로 응답합니다. Base64로 변환 한 후 ksoap2 라이브러리로 업로드하려고했지만 실패했습니다. 내 비누 헤더 xml 크기의 크기가 1048000 정도의 문자를 쓰면 실패합니다.android에서 여러 파일을 업로드하는 방법

그런 다음 내 업로드 방식을 변경하고 HttpURLConnection 또는 http 클라이언트 중 하나를 사용하려고합니다. 내 시나리오에서 어느 것이 효율적인지 결정할 수 없습니다.

감사

다음

코드를입니다

코드 :

  InputStream is = getResources() 
        .openRawResource(R.raw.file_name); 

      int size = 0; 
      // Read the entire resource into a local byte buffer. 
      byte[] buffer = new byte[1024]; 
      try { 

       while ((size = is.read(buffer, 0, 1024)) >= 0) { 
        baos.write(buffer, 0, size); 
       } 

       is.close(); 
       buffer = baos.toByteArray(); 
      } catch (Exception e) { 
       // TODO: handle exception 
       e.printStackTrace(); 
      } 


      base64string = new String(Base64.encode(buffer, Base64.DEFAULT)); 

오류 난 당신이 사용하고자하는 서버의 종류를 잘 모릅니다

org.xmlpull.v1.XmlPullParserException: unexpected type (position:END_DOCUMENT [email protected]:1 in [email protected]) 
at org.kxml2.io.KXmlParser.nextTag(KXmlParser.java:2035) 
at org.ksoap2.SoapEnvelope.parse(SoapEnvelope.java:126) 
at org.ksoap2.transport.Transport.parseResponse(Transport.java:63) 
at org.ksoap2.transport.HttpTransportSE.call(HttpTransportSE.java:100) 

답변

0

. 업로드하는 동안 파일이 중지되는 문제는 서버 설정에있을 수 있습니다. 예를 들어 당신의 PHP 설정에서 사용자가 최대 업로드 파일 크기를 정의 할 수 있습니다 등 여기에 PHP 예 :

public void uploadFile(){ 


try { 
FileInputStream fis =this.openFileInput(NAME_OF_FILE); 
HttpFileUploader htfu = new HttpFileUploader("http://11.0.6.23/test2.php","noparamshere", NAME_OF_FILE); 
htfu.doStart(fis); 
} catch (FileNotFoundException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 

더 읽기 : http://getablogger.blogspot.com/2008/01/android-how-to-post-file-to-php-server.html#ixzz27YPjwX8B

편집 : 당신은 또한하여 비누 전송이보다 효율적으로 시도 할 수 MTOM 구현 :

SOAP를 통해 이진 파일을 전송하도록 설계된 W3C 표준 MTOM을 확인하십시오. 위키

:

MTOM provides a way to send the binary data in its original binary form, 
    avoiding any increase in size due to encoding it in text. 

관련 리소스 :

SOAP 메시지 전송 최적화 메커니즘 http://www.w3.org/TR/soap12-mtom/

메시지 나는 비누를 통해 작은 파일을 업로드 할 수 있습니다 http://en.wikipedia.org/wiki/MTOM

+0

전송 최적화 메커니즘 (위키 백과) 그러나 issu에는 더 큰 파일이있다. 내가 큰 파일을 업로드 할 때 비누로 850KB라고 말하면 실패합니다. 서버 직원은 그 당시에 내 앱에서 주목한다고 말한다. – Calvin

+0

그래서 실제로 서버에 액세스 할 수 없습니까? 서버가 어떻게 구성되어 있는지 알고 있습니까? 그것은 서버 문제처럼 들린다. 그럼에도 불구하고 당신은 내 제안을 시도 할 수 있습니다. – SunnySonic

+0

PHP 서버입니다. webend를 통해 요청을 전달하려고 시도했지만 1MB 파일에서도 제대로 작동합니다. 나는 서버가 현재 SOAP를 사용하기 때문에 당신이 제안한 방법을 사용할 수 없다. 실제 데이터보다 먼저 인증 헤더와 모든 정보를 전달해야합니다. 그러나 모두 실패하면 관리자에게 서버 코드를 변경하여 그 목적을 달성 할 수 있도록 제안 할 수 있습니다. – Calvin

관련 문제