آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
مشکل عدم دسترسی خریداران پیشین به برخی آموزش ها برطرف شد
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

آموزش ارسال چندین عکس یا فایل یا ویدیو به سرور به صورت داینامیک( آپدیت خواهد شد)

118426  7 سال پیش  7 سال پیش
+3 0

میخواهیم چندین عکس یا فیلم یا فایل در قالب فایل به سرور ارسال نماییم. این آموزش به درد چه کسانی میخورد، به درد کسانی میخورد که میخوان عکسها یا فیلم یا فایلها در سرور ذخیره کنن و آدرس ذخیره شدن آن را در دیتابیس بریزن، این روش بسیار قابل توجیه هست و اکثر کمپانیهای بزرگ، مثلا برای آپلود کردن عکسهای کاربران خودش ابتدا عکس را در سرور ذخیره میکنن و آدرس عکس را در دیتابیس ذخیره میکنن و علت فنی هم دلایل زیادی دارد.ضمن اینکه این آموزش بیشتر جنبه آموزشی دارد ولی به درد پروژهای کاربردی خیلی میخورد.  قبل از انجام این کار چند نکته را بگم:

1- از کتابخانه Okhttp3 استفاده خواهیم کرد، علت استفاده نکردن از کتابخونه volley فقط در قالب استرینگ میتوان به سرور ارسال کرد ( یکی از معایباش)

2- ما در این آموزش فعلا برای ارسال عکس آموزش میدهیم، اما کدهایی که نمایش میدهیم میتونین به جای عکس، فیلم یا فایل ارسال نمایید.

3- ما در این آموزش نحوه انتخاب کردن عکسها رو آموزش نمیدهیم، فرض میکنیم ما آدرس عکسها رو در یک آرایه ذخیره کردیم. یا اگر آدرس عکسها رو ندارین میتونین در گوگل یا آموزش سایت استفاده کنین.

4- قبل از شروع کتابخونه در  Gradle اضافه کنین : compile 'com.squareup.okhttp3:okhttp:3.4.1' 

5- در صورت امکان مستنداتت این کتابخونه را مطالعه نمایید.

6- یکی از دلایلی که ما از Base64 استفاده نمیکنیم در سمت سرور باید عکس کانورت بشه و عکس بالای 20% به حجم عکس اضافه میشه و غیر قابل توجیه هست.

7- در یکی از کدهای زیر         buildernew.addFormDataPart("uploaded_file[]",String.valueOf(i)+".png", RequestBody.create(MEDIA_TYPE, sourceFile[i]));

این کد 3 تا پارامتر میگیرد: پارامتر اول اسم پارامتری که قراره سرور آنرا بخواند، پارامتر دوم نام فایل ( بهتر هست پرایمیر کی یوزر دبتابیس بفرستین اما برای قابل فهم من از عدد استفاده کردم، پارامتر سوم سورس عکسها یا همون سورسی که عکسها رو به فایل تبدیل کردیم

8- کد PHP در پست بعدی قرار خواهد گرفت.

9- در کد php برای خلوت شدن دستورات دیتابیس رو حذف کردم، فقط نحوه خواندن اطلاعات از سمت اندروید به سرور را نوشتم .  

10 - چرا بکگراند کدها این رنگی شد :دی. این کدها را کپی پست کنین یه جایی قابل فهم تر خواهد بود :دی. 

11- به زودی آموزش ترکیبی از volley و این کتابخونه، و نحوه مدیریت کردن انتخاب چندین عکس به صورت imagePicker و کد بهینه تر و حرفه ای تر قرار خواهم داد.

شروع:

public void uploadImage(ArrayList<String> mSelectPath){
// mSelectPath  آرایه ای که آدرس عکسها رو ذخیره کردیم

    File sourceFile[] = new File[mSelectPath1.size()];// تعداد عکسهایی که در آرایه هست
    for (int i=0;i<mSelectPath.size();i++){
        sourceFile[i] = new File(mSelectPath1.get(i)); // همه عکسها به فایل تبدیل میشود
    }

    String url = "UrlAddress";// آدرس سرور

    final MediaType MEDIA_TYPE = mSelectPath.get(0).endsWith("png") ? // فرمت عکسهایی که میخواهیم به سرور ارسال نماییم
            MediaType.parse("image/png") : MediaType.parse("image/jpeg");

    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();
                Log.v("respons is ok", resp);// جوابی که از سرور میگیریم
                if(response.isSuccessful()) {
                } else {

                }
            } catch(IOException e) {
                Log.e("respons is not Ok", "Exception caught: ", e);
            }
        }
    });

}


 برای این سوال 1 پاسخ وجود دارد.
پاسخ به سوال 
118426  7 سال پیش
0 0

 <?php
if (isset($_REQUEST['action'])){

 $action = $_REQUEST['action'];
 
} else {
    echo "Invalid Data";
    exit;
}

if($action=="uploadimage") { uploadimage(); }
function uploadImage(){ foreach ($_FILES["uploaded_file"]["error"] as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmp_name = $_FILES["uploaded_file"]["tmp_name"][$key]; $name = $_FILES["uploaded_file"]["name"][$key]; $file_path = "محدل آدرس ذخیره فایللها "; $file_path = $file_path . $name; if(@move_uploaded_file($tmp_name, $file_path)) { echo "Success"; } else{ echo "fail"; } } } }

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .