2014-03-26 2 views
13

개조를 사용하여 다른 텍스트 데이터와 함께 동일한 매개 변수에 여러 이미지/파일을 추가하는 방법은 무엇입니까?개조를 사용하여 POST 다중 이미지 파일의 도움이 필요하십니까?

Single image is uploading perfectly using following interface 
    @Multipart 
    @POST("https://stackoverflow.com/users/updateProfile/") 
    public void updateProfileWithImage(
        @Part("user_id") TypedString first_name, 
        @Part ("image") TypedFile image, 
        Callback<WebResponse> callback); 
+0

하나의 이미지를 추가하기 위해 지금 사용하고있는 것들의 예가 있습니까? – kabuto178

+0

'@ Part' 매개 변수를 메소드에 추가하기 만하면됩니다. 당신은 이미 올바른 길을 가고 있습니다. –

+3

그러나 ArrayList 어댑터에서 @Part로 이미지를 동적으로 추가하는 방법은 무엇입니까? @Part ("image")로 ArrayList 이미지가 파일을 게시하지 않습니다. – mahsanq

답변

12

당신은 매개 변수로 @PartMap와

Map<String, TypedFile> files = new HashMap<String, TypedFile>(); 
files.put("my file number one", new TypedFile("image/jpg", new File(filename))); 
files.put("my file number two", new TypedFile("image/jpg", new File(filename))); 

apiInterface.updateProfileWithImage("first name here", files); 

private interface ApiInterface{ 
    @Multipart 
    @POST("https://stackoverflow.com/users/updateProfile/") 
    Response updateProfileWithImage(
    @Part("user_id") TypedString first_name, 
    @PartMap Map<String,TypedFile> Files 
    ); 

} 
+1

twitter에서 우리는 동일한 파일명을 지정해야합니다. 'files.put ("media []", file); files.put ("media []", file); ' 그래서 여러 파일을 업로드하지 않는 문제가 있습니다. @Francois이 모든 솔루션? –

+1

@ YashSodha 솔루션을 찾았습니까? –

+0

@ BorisTreukhov 아니, 대신 다른 사진과 함께 여러 트윗으로 설정했다 –

11

개조 2.0을 @MultiPart 포스트를 사용할 수 있습니다 + OkHttp 3

인터페이스 선언 :

@POST("postpath") 
Call<Void> upload(@Body MultipartBody filePart); 

만들기 MultiPartBody :

각 파일에 대한 다음
MultipartBody.Builder requestBodyBuilder = new MultipartBody.Builder() 
        .setType(MultipartBody.FORM); 

(당신은 또한 사용자 정의 필드를 추가 할 수 있습니다)

requestBodyBuilder.addFormDataPart("extraImage[]", "photo.jpg", 
          RequestBody.create(MediaType.parse("image/jpeg"), byteArrayOrFile)); 

마지막

api.upload(requestBodyBuilder.build()); 

P.S. 당신은

requestBodyBuilder.addFormDataPart("client[name]", null, RequestBody.create(MediaType.parse("text/plain"), name)) 

또는

requestBodyBuilder.addFormDataPart("client[name]", name)) 

개조와 같은 형태로 1.9 (예 client.name에 대한) 사용자 지정 양식 필드를 추가 할 수 있습니다 : 당신은 다중의 변수 번호를 게시 할 MultipartTypedOutput을 사용할 수 있습니다

-part 매개 변수.

@POST("/postpath") 
SomeResponse upload(@Body MultipartTypedOutput output); 
:

프랑수아 '대답에 추가

, 같은/개조에 (배열로) 필드 이름을 반복하면 MultipartTypedOutput

방법 서명 사용할 수 있습니다 여러 이미지를 게시하려면

사용법 :

MultipartTypedOutput multipartTypedOutput = new MultipartTypedOutput(); 
multipartTypedOutput.addPart("mainImage", new TypedFile("image/jpeg", mainImage)); 
multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file1)); 
multipartTypedOutput.addPart("extraImage[]", new TypedFile("image/jpeg", file2)); 
upload(multipartTypedOutput); 

S quare brackets

일부 서버 측 프레임 워크 (레일)에는 일반적으로 대괄호가 필요합니다. extraImage 대신 extraImage[]), 다른 것들은 (스프링 MVC) 않습니다.

+1

이것을 사용하려면 POST 위에서 @Multipart를 사용해야합니까 ?? –

+1

@SudhanshuGaur'@ Body MultipartTypedOutput' 인수를 사용하는 경우 ** NO **. –

관련 문제