2014-12-18 3 views
1

나는 갤러리에서 서버로 이미지 업로드를 추가해야하는 응용 프로그램을 만들고 있는데, 이미 aske이지만 아무 대답도 얻지 못했습니다. 여기서는 How to upload image from gallary to server?입니다. 갤러리에서 선택하고 보낼 때마다 문제가 발생합니다. 소스 파일이 아닙니다. 어느 누구도 도움이 될 수 있습니까? 갤러리에서 이미지 파일을 선택갤러리에서 선택한 서버에 이미지를 업로드하는 방법은 무엇입니까?

+0

갤러리 파일의 경로/URI를 가져올 수 있습니까? –

+0

예 내 에뮬레이터 갤러리 service_lifecycle에 하나의 이미지를 추가했지만 내 핸드폰에 APK를 추가하고 업로드하지 않는 갤러리에서 사진을 선택하면 –

+0

어떤 종류의 오류가 발생합니까? –

답변

1

시작 의도 ... 활동 결과에

startActivityForResult(new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI),54); 

URI를 파일을 얻을 ...

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode != RESULT_CANCELED) { 
     try { 
      if (requestCode == 54 && resultCode != 0) { 
       if (intent != null) { 
        Uri selectedImage = intent.getData(); 
       } else { 
        Toast.makeText(getApplicationContext(), 
          "Could not load image", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 
    } 
} 

URI에서 파일 바이트를 가져옵니다 ...

private byte[] GetFileBytes(Uri uri) 
{ 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(200000); 
    InputStream imageStream; 
    try { 
     imageStream = getContentResolver().openInputStream(uri); 
     byte[] buffer; 
     buffer = new byte[100000]; 
     while ((imageStream.read(buffer)) != -1) { 
      bos.write(buffer); 
     } 
    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 
    return bos.toByteArray(); 
} 

바이트 배열에서 MultipartEntity 가져 오기 ...

private MultipartEntity getEntity(byte[] bytes) 
{ 
    MultipartEntity entity = new MultipartEntity(); 
    InputStream in = new ByteArrayInputStream(bytes); 
    ContentBody bin = new InputStreamBody(in, "Image_" + c.getTimeInMillis() + ".jpg"); 
    entity.addPart("image_query_string_variable_name", bin); 
} 

MultipartEntity는 httpmime의 클래스입니다. 인터넷 검색을 통해 JAR을 쉽게 찾을 수 있습니다. 이 jar 파일을 프로젝트 속성에서 프로젝트에 추가해야합니다.

서버에 게시 ...

private void PostData(MultipartEntity entity) 
{ 
    HttpParams httpParameters = new BasicHttpParams(); 
    HttpConnectionParams.setConnectionTimeout(httpParameters, 20000); 
    HttpConnectionParams.setSoTimeout(httpParameters, 20000); 
    DefaultHttpClient client = new DefaultHttpClient(httpParameters); 

    HttpPost request = new HttpPost("http://www.you_server_url.com/someFileName.php"); 
    request.setEntity(entity); 

    HttpResponse response = null; 
    response = client.execute(request); 
    BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
    StringBuffer result = new StringBuffer(); 
    String line = ""; 
    while ((line = rd.readLine()) != null) { 
     result.append(line); 
    } 
    // 
    // Process the returned result from server... 
    // 
} 

더 편집 :

byte[] fileBytes = null; 
public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
    if (resultCode != RESULT_CANCELED) { 
     try { 
      if (requestCode == 54 && resultCode != 0) { 
       if (intent != null) { 
        Uri selectedImage = intent.getData(); 
        fileBytes = GetFileBytes(selectedImage); 
       } else { 
        fileBytes = null; 
        Toast.makeText(getApplicationContext(), 
          "Could not load image", 
          Toast.LENGTH_SHORT).show(); 
       } 
      } 
     } catch (Throwable e) { 
      e.printStackTrace(); 
     } 
    } 
} 

// when button is clicked... 
public void onClick(View v) 
{ 
    if(fileBytes != null) 
    { 
     MultipartEntity entity = getEntity(fileBytes); 
     PostData(entity); 
    } 
} 

행운을 빕니다. :)

+0

나는 이미 이것을했다 –

+0

그것은 나를 위해 완벽하게 모든 장치에서 잘 작동합니다. –

+0

채팅 할 수 있습니까? –

관련 문제