ارسال عکس به سرور از طریق volley بدون استفاده از base64
برای ارسال عکس به سرور در نت HttpURLConnection آموزشها فراوان هست اما منسوخ شده.
من میخوام عکسها رو بدون تبدیل به base64 به سرور بفرستم، اما در volley فقط به صورت استرینگ میتوان استفاده کرد راه حلش اینه که باید از لایبری org.apache.http.legacy در volley استفاده کنیم.
مسئله اینجاست که ما نمیخواییم از این روش استفاده کنیم. کسی میتونه راه حل اصولی و تمیز معرفی کنه؟
base64 خیلی بده، اصلا توصیه نمیشه، فرضا اگر عکسها حدود 20% به حجم عکس اضافه میشه اصلا بهینه نیست و اگر عکس بالای 100 هزار تا آپلود بشه کلی حافظه سرور رو اشکال میکنه.
بلخره تونستم، عکسها رو بدون استفاده از base64، به صورت File به سرور بفرستم، حتی به صورت Multiple.
من ترکیبی از volley و okhttp3 استفاده کردم خیلی خیلی نتیجه خوبی داشت و سرعت بسیار عالی دارد. پایین هم سورس ارسال آرایه از عکسها به صورت داینامیک به File میریزیم، و در آخر میفرستیم به سرور. امیداورم مفید باشه.
این پست بعدا با آموزش کامل آپدیت میشه.
File sourceFile[] = new File[mSelectPath1.size()];
for (int i=0;i<mSelectPath1.size();i++){
sourceFile[i] = new File(mSelectPath1.get(i));
}
MultipartBody.Builder buildernew = new MultipartBody.Builder()
.setType(MultipartBody.FORM);
buildernew.addFormDataPart("action","uploadimage");
for (int i = 0; i < mSelectPath.size(); i++) {
buildernew.addFormDataPart("uploaded_file[]",String.valueOf(i)+".png", RequestBody.create(MEDIA_TYPE, sourceFile[i]));
}
MultipartBody requestBody = buildernew.build();
OkHttpClient client = new OkHttpClient();
okhttp3.Request request = new okhttp3.Request.Builder()
.url(url)
.post(requestBody)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, okhttp3.Response response) throws IOException {
try {
String resp = response.body().string();
if(response.isSuccessful()) {
} else {
}
} catch(IOException e) {
}
}
});
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .