[英]Facing Issue while uploading images using android Retrofit 2
我在使用改造2上傳圖片時遇到一些問題。 我有一個api,可以上傳三種圖像(個人資料圖像,橫幅圖像,其他圖像)。 我需要傳遞三個參數(user_id,type(profile / banner / other),media(file))...我不知道該怎么做...
這是我的界面...
@Multipart
@POST("media/upload_media")
Call<ServerRespose> upload(
@Part MultipartBody.Part file ,
@Query("user_id") int user_id ,
@Query("type") String type
);
這是我要嘗試的地方...
private void uploadFile(String path, Uri fileUri, final int type) {
// create upload service client
uid = DatabaseUtil.getInstance().getUser().getData().getID();
String username = SharedPreferenceUtil.getStringValue(this, Constants.USERNAME);
String password = SharedPreferenceUtil.getStringValue(this, Constants.PASSWORD);
if (!username.isEmpty() && !password.isEmpty()) {
Api service =
RetrofitUtil.createProviderAPIV2(username, password);
//
try {
// use the FileUtils to get the actual file by uri
showProgressDialog("Uploading");
File file = new File(path);
RequestBody requestFile =
RequestBody.create(
MediaType.parse(getContentResolver().getType(fileUri)),
file
);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part body =
MultipartBody.Part.createFormData("file", file.getName(), requestFile);
// finally, execute the request
Call<ServerRespose> call = service.upload(body , uid , "profile_image");
call.enqueue(new Callback<ServerRespose>() {
@Override
public void onResponse(Call<ServerRespose> call,
Response<ServerRespose> response) {
hideProgressDialog();
Log.v("Upload", "success");
ServerRespose item = response.body();
try {
if (item != null) {
// item.setSuccess(true);
if (type == SELECT_PROFILE_PIC) {
profileImageRecyclerViewAdapter.addNewItem(item);
profileImageRecyclerViewAdapter.notifyDataSetChanged();
} else {
bannerImageRecyclerViewAdapter.addNewItem(item);
bannerImageRecyclerViewAdapter.notifyDataSetChanged();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onFailure(Call<ServerRespose> call, Throwable t) {
AppUtils.showDialog(Profile_Activity.this, "There is some Error", null);
Log.e("Upload error:", t.getMessage());
}
});
} catch (Exception e) {
e.printStackTrace();
}
} else {
showDialogSignedUp("Session Expired Please Login Again...", null);
}
}
注意:我的代碼不起作用,只是選擇圖像並顯示正在上傳,它也不返回任何形式的響應……任何人都請提供正確的代碼來幫助我,我需要在很短的時間內完成此工作。 在這里檢查參數...
function save_image($request)
{
if(!empty($request['user_id'])){
$user_identity = $request['user_id'];
$submitted_file = $_FILES['media'];
$uploaded_image = wp_handle_upload( $submitted_file, array( 'test_form' => false ) );
$type = $request[ 'type' ];
//return $submitted_file;
if ( !empty( $submitted_file )) {
$file_name = basename( $submitted_file[ 'name' ] );
$file_type = wp_check_filetype( $uploaded_image[ 'file' ] );
// Prepare an array of post data for the attachment.
$attachment_details = array(
'guid' => $uploaded_image[ 'url' ],
'post_mime_type' => $file_type[ 'type' ],
'post_title' => preg_replace( '/\.[^.]+$/', '', basename( $file_name ) ),
'post_content' => '',
'post_status' => 'inherit'
);
嘗試這種方式..
@Multipart
@POST(NetworkConstants.WS_REGISTER)
Call<UserResponseVo> registerUser(@Part MultipartBody.Part file, @PartMap Map<String, RequestBody> map);
之后..
MultipartBody.Part fileToUpload = MultipartBody.Part.createFormData("file", file.getName(), mFile);
RequestBody userName = RequestBody.create(MediaType.parse("text"), mEtUserName.getText().toString());
RequestBody userEmail = RequestBody.create(MediaType.parse("text"), mEtEmail.getText().toString().trim());
RequestBody userPassword = RequestBody.create(MediaType.parse("text"), mEtPassword.getText().toString().trim());
Map<String, RequestBody> map = new HashMap<>();
map.put(NetworkConstants.KEY_FIRST_NAME, userName);
map.put(NetworkConstants.KEY_EMAIL, userEmail);
map.put(NetworkConstants.KEY_PASSWORD, userPassword);
retrofit.create(ApiInterface.class).registerUser(fileToUpload, map);
嘗試這個
1)在接口類中聲明方法
@Multipart
@POST("media/upload_media")
Call<AddImageResponseClass> upload(@Part("user_id") RequestBody user_id, @Part("media\"; filename=\"myfile.jpg\" ") RequestBody profile_pic,@Part("type") RequestBody type);
然后在java類中
String BASE_URL=base_url;
final OkHttpClient okHttpClient = new OkHttpClient.Builder().writeTimeout(2, TimeUnit.MINUTES).retryOnConnectionFailure(true)
.readTimeout(2, TimeUnit.MINUTES)
.connectTimeout(2, TimeUnit.MINUTES)
.build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(BASE_URL).client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create())
.build();
Api service =
RetrofitUtil.createProviderAPIV2(username, password);
File file = new File(path);
RequestBody reqFile = RequestBody.create(MediaType.parse("image/*"), file );
String user_id= user_id_here;
String type= type_here;
RequestBody reqUserId= RequestBody.create(MediaType.parse("text/plain"), user_id);
RequestBody reqType= RequestBody.create(MediaType.parse("text/plain"), type);
Call<ServerRespose> userCall = service.upload(reqUserId, reqFile,reqType);
userCall.enqueue(new Callback<ServerRespose>() {
@Override
public void onResponse(Call<ServerRespose> call, Response<ServerRespose> response) {
if (response.body() == null) {
//handle here
return;
}
}
@Override
public void onFailure(Call<ServerRespose> call, Throwable t) {
System.out.println("response failure" + t.getMessage());
t.printStackTrace();
}
});
並導入這些
implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:converter-scalars:2.3.0'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.