هم اکنون عضو شوید

ورود

فراموشی گذرواژه

گذروازه خود را فراموش کردید ؟

ورود

عضو شوید

با عضویت در سایت از امکانات فوق العاده بهرمنده خواهید شد.

آموزش آپلود فایل در برنامه نویسی اندروید

آموزش آپلود فایل در برنامه نویسی اندروید

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش آپلود فایل در برنامه نویسی اندروید می پردازیم در اندروید امکان ندارد فایل را مستقیما آپلود کنیم و باید از یک واسط برای اینکار استفاده کنیم واسط ما در اینجا یک فایل php است که از آن برای آپلود استفاده می کنیم شاید بشه گفت در اینجا اندروید واسط است چون ادرس فایل توسط اپ به دست می آید و سپس یک request به وب سرور ارسال می شود در ادامه با ما همراه باشید.

ابتدا فایل php را ایجاد می کنیم نام این فایل برابر با UploadToServer.php است این فایل باید در سایت یا هاست شما ایجاد شود در صورتی که می خواهید local تست کنید می توانید از xampp یا برنامه های مشابه استفاده کنید.

در صورتی که این فایل ایجا کردید یک پوشه به نام uploads ایجاد کنید تا فایل ها که آپلود می شوند در آن قرار گیرد.  اگر سایت ما برابر با programchi باشد ادرس همانند زیر می شود.

و فایل آپلود شده در مسیر زیر قابل دسترسی خواهد بود البته در وب سرور خودتان در سرور ما چیزی به نام این فایل وجود ندارد.

 

حالا برویم به سراغ کد های اندروید

وارد AndroidManifest.xml شده و دسترسی های زیر را اضافه کنیم.

کد مربوط به activity_main.xml همانند زیر می شود.

حالا باید یک کلاس درست کنیم که مسیر را از حافظه برای ما برگرداند یعنی چیزی را ما انتخاب می کنیم

پس برای این کار یک فایل به نام FilePath.java ایجاد کرده و کد های زیر را در آن قرار دهید.

برای اینکه provider که باز می شود تا فایل را بگیرد در گوشی های مختلف پشتیبانی شود و یکسری بررسی های کلی برای اینکه متوجه بشویم چه نوع فایلی انتخاب می شود و یا اینکه کاربر حافظه اصلی آن قابل دسترسی است و mount شده باشد.

و در آخر هم کد مربوط به MainActivity.java همانند زیر می شود.

در بالا تمای بخش ها که ممکن بود به خطا بخورد بررسی شده است مثل آپلود ناموفق یا کرش دادن سرور در هنگا آپلود و stable بودن سرور برای آپلود همه چیز با کمی دقت آن ها را خواهید دید.

 

این آموزش هم به پایان رسید.

 

موفق و موید باشید.

درباره نویسنده

با زبان های برنامه نویسی C# , Java , Php به صورت تخصصی کار کردم و بیشتر وقتم رو در برنامه نویسی می گذرونم علاقه زیادی به ساخت اپلیکیشن اندروید دارم.

نظرها ( ۳۶ )

  1. mah
    ۲۴, مرداد , ۱۳۹۶ در ۱:۱۳ ق.ظ

    تو activity result شرط else چ زمانی برقرار هست ؟
    else{
    Toast.makeText(this,”Cannot upload file to server”,Toast.LENGTH_SHORT).show();
    }

    • محمد حسین جعفری پور
      ۲۴, مرداد , ۱۳۹۶ در ۳:۱۵ ق.ظ

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

      • mah
        ۲۴, مرداد , ۱۳۹۶ در ۸:۵۸ ق.ظ

        مربوط به سرور نمیشه . تو قسمت onActivityResult نوشته شده .

        • محمد حسین جعفری پور
          ۲۴, مرداد , ۱۳۹۶ در ۱۲:۱۸ ب.ظ

          می تواند مربوط باشد در صورتی که فایل خراب باشد یا سرور مشکل داشته باشد و فایل نتواند آپلود شود پیام خطا برای شما نمایش داده می شود.

  2. Sam
    ۱۹, مهر , ۱۳۹۶ در ۱:۲۱ ق.ظ

    سلام
    کد های مربوط به این صفحه
    http://programchi.ir/UploadToServer.php
    چی هستن ؟
    برنامه فایل هارو به این آدرس ارسال میکنه و طبق کد های این آدرس فایل هارو توی هاست شما ذخیره میکنه اگر میشه کد های این صفحه رو هم قرار بدید

  3. ۱۴, دی , ۱۳۹۶ در ۱:۲۱ ق.ظ

    آقا من این رو انجام دادم انصافا کار نمیده
    ای کاش پروژه رو اپلود میکردی

    یک فایل phpساختم با html برای تست کردن ، تستش کردم اکی بود.
    امااین کدهای شمادر برنامه ی اندروید اصلا کارنداد متاسفانه.
    هرکاریش کردم جواب نداد …تروخداخیلی بهش نیاز دارم اگه امکان داره کله پروژه رو برامون بزارید…..کتابخونهاش و…خیلی مهم هست دسته کم بفهمیمم این کتابخانه هاکجاهستن
    باسپاس
    من منتظرم حتماجواب بدید که انصافا گیرم

  4. ۱۴, دی , ۱۳۹۶ در ۱:۲۵ ق.ظ

    این کدهای php من هستن .فایل وفکرکرنم میگیره اماخروجی هم میده اما به جای نوع و اندازه مقدار تهی برمگیردونه .
    یعنی پس از اپلود سایزش رو تهی میده /امابا html اپلود میکنم کدهام درست کارمیکنه

  5. ۱۴, دی , ۱۳۹۶ در ۱:۲۹ ق.ظ

    دوستان این کد هم به برنامه اضافه کنید دقیقا بالای
    if(serverResponseCode == 200)

    چرا؟؟؟؟؟؟؟؟؟چون اینجوری به محتوای body یا php هم دست میبابید …..من دوست داشتم خروجی کدهای html بگیرم وسطش داده گذاشته بودم

    لطفا mes رو متغیرسراسری تغریف کنید ک بتونید چاپش کنید

  6. پارسا
    ۱۴, دی , ۱۳۹۶ در ۱۲:۵۰ ب.ظ

    باسلام
    یه سوال داشتم
    چرا وقتی این پروژه رو روی دیوایسی نصب میکنم به خاطر این قسمت ارور میده !!
    return getDataColumn(context, contentUri, selection,
    selectionArgs);

    اگ میشه راهنمایی کنید !!

  7. ۱۴, دی , ۱۳۹۶ در ۲:۱۹ ب.ظ

    دوستان این برنامه یک اشکال داره هرکس فهمید کجاشه؟؟؟؟؟؟؟؟؟؟؟؟؟؟

    dataOutputStream.writeBytes(“Content-Disposition: form-data; name=\”uploaded_file\”;filename=\””
    + selectedFilePath + “\”” + lineEnd);

    دوستان قسمت uploaded_file در خط بالا رونگاه کنید
    حتماحتماحتما باید این نام با نام FILES[“file”][“name”] درقسمت php یکی باشه .یعنی file رو با uploade_file باید عوض کرد
    یعنی اینجوری
    FILES[“uploade_file”][“name”]

  8. امین
    ۲۶, اردیبهشت , ۱۳۹۷ در ۱:۱۳ ب.ظ

    سلام من توی عکسای دوربین داخل گالری انتخاب میکنم خطا میده قسمت tmp_name هستش در پی اچ پی دلیلش چیه

  9. saeed
    ۲۴, خرداد , ۱۳۹۷ در ۱۰:۵۷ ق.ظ

    سلام خسته نباشید
    من اون کدای php ‌که تو مرورگر سرچ میکنم پیغام زیر نشون داده میشه

    Notice: Undefined index: uploaded_file in C:\xampp\htdocs\musicBox\UploadToServer.php on line 5

    Notice: Undefined index: uploaded_file in C:\xampp\htdocs\musicBox\UploadToServer.php on line 6
    fail

  10. saeed
    ۲۸, خرداد , ۱۳۹۷ در ۹:۲۱ ب.ظ

    سلام خسته نباشید
    ممنون از پاسخگوییتون
    من کدارو که اجرا میکنم برنامه اجرا میشه فایل هم انتخاب میکنم و آپلود رو که میزنم برنامه پیغام has stopped ‌میده و میاد بیرون
    و توی logcat اررور زیر رو نشون میده: err: java.net.SocketException: Connection reset

    میدونید مشکلش چی هستش؟

  11. Mahan
    ۲۲, تیر , ۱۳۹۷ در ۱۱:۴۸ ب.ظ

    سلام خسته نباشید
    اگر بخوام موقع انتخاب فایل به جای اینکه بشه یه فایل رو انتخاب کرد چند تا فایل رو انتخاب کرد و بعدش آپلود کرد چیکار باید کنم؟

  12. ali
    ۸, مرداد , ۱۳۹۷ در ۱۰:۳۳ ق.ظ

    سلام
    مرسی ممنون از آموزشی که گذاشتید
    برای من اولش روی کلیک لیستنر ها ایراد میگرفت ولی بعدش درست شد و فایل به سرور xamp آپلود شد

    الان در پوست خودم نمیگنجم چقد دنبال این آموزش میگشتم ولی کار نمیکرد اونایی که بود

    کاش یه توضیحی هم رو هر آیتمی میدادید چون من این رو خط به خط کپی کردم فقط و نفهمیدم دقیقا چی شدش !!

  13. ali
    ۸, مرداد , ۱۳۹۷ در ۱۰:۳۷ ق.ظ

    فقط الان یه مشکلی که من بهش خوردم وقتی خواست عکس رو از داخل کارت حافظه بخونه برنامه کرش کرد و گفت پرمیژن نداره

    اولش که وارد برنامه میشی ازت پرمیژن نمیگیره
    من رو اندروید ۶ تست کردم

    وقتی رفتم خودم تو تنظیمات بهش دسترسی دادم برنامه کار کرد
    حالا مشکل از کجاست که خودش پرمیژن رو نمیگیره؟؟
    و اینکه اگه پرمیژن نداشته باشه نباید کرش کنه باید بگه دسترسی موجود نیست

    • محمد حسین جعفری پور
      ۸, مرداد , ۱۳۹۷ در ۲:۴۶ ب.ظ

      شما باید از runtimepermission استفاده کنید که آموزش های در سایت هست که باعث میشه خود برنامه از کاربر دسترسی رو بگیره و نیازی نباشه کاربر همون کاری که شما کردید رو انجام دهد.

      http://programchi.ir/?s=runtime

      موفق باشید.

  14. جعفر
    ۱۲, مرداد , ۱۳۹۷ در ۱۱:۰۲ ق.ظ

    تشکر اقا محمد حسین
    اموزشتون عالی بود

  15. نغمه
    ۱۳, مرداد , ۱۳۹۷ در ۳:۴۹ ب.ظ

    سلام، ممنون از آموزشتون، من کد آپلود را مینوسیم همه چیز خوبه تا زمانی که داره آپلود میکنه بالای صفحه گوشی که آپلود را نمایش میده ناقص انجام میشه و میگه آپلود نشد، تو برنامه هم خطایی نمیده
    فقط یه موردی هست سمت سرور ما با mvc هست و فقط یه آدرس برای آپلود به من داده که این آدرس هم وقتی توی نوار آدرس میزنم شامل عکس های سایت هست، بهشون گفتم نباید فایلی بنویسن شبیه همین php گفتن نه و دسترسی های لازم داده شده. به نظرتون مشکل از کجاست؟

    • محمد حسین جعفری پور
      ۱۳, مرداد , ۱۳۹۷ در ۶:۲۱ ب.ظ

      سلام و درود
      بسته به کدی که سمت سرور شما نوشتن شما باید عکس رو POST کنید مطمئنن که باید POST بکنید ولی به چه شکلی بستگی داره سمت سرور چه جوری نوشته شده باشه و اینکه فکر می کنم باید شما به صورت BASE64 عکس رو POST کنید و اونطرف بگیرن کد PHP رو از طرف سرور دریافت کنید قرار بدید بهتر می تونیم کمکتون کنیم.
      اموزش بالا تست شده است و اگرم دقت کرده باشید ما اومدیم خودمون SCRIP برای بخش آپلودش نوشتیم.

      موفق باشید.

  16. FAZEL UNITY
    ۲۸, مرداد , ۱۳۹۷ در ۸:۴۱ ب.ظ

    سلام
    از من همه چیش درسته فقط فایل که آپلود شده رو تو HOST نمیبینم
    فکر کنم اصلا نیست

  17. وحید
    ۲۶, مهر , ۱۳۹۷ در ۱۱:۲۸ ق.ظ

    دوستان انجامش دادم و به درستی کار میکنه …
    برای اینکه برای بار اول مطمئن بشید که درست کار میکنه تمامی متغیر ها رو مشابه همین فایل قرار بدید غیر از نام سرور که اطمینان پیدا کنید
    حتما هم بایستی فولدر uploads رو خودتون ایجاد کنید و موضوعی که من داشتم و یکم وقتمو گرفت این بود که بزرگ و کوچیک بودن حرف اول نام فولدر uploads رو ایراد میگرفت و نمیشناخت …
    تو آموزشی نام فولدر را با uploads نوشته یعتی با u کوچیک اما شما که فولدر رو ایجاد میکنید خود به خود گاهی وقتا Uploads ایجاد میشه و حرف U رو بزرگ میکنه
    توی کد PHP هم میتونید

    $file_path = “Uploads/”;

    رو جایگزین کنید

  18. محمود
    ۴, آذر , ۱۳۹۷ در ۱۱:۴۶ ق.ظ

    سلام.
    ممنون از راهنمایی‌هاتون
    لطفاً میشه بگید اگه بخوایم همراه با ارسال فایل، یه سری متغیر هم به صورت post ارسال کنیم باید چیکار کنیم؟

    • محمد حسین جعفری پور
      ۵, آذر , ۱۳۹۷ در ۱۱:۲۳ ب.ظ

      سلام و درود
      بسته به وب سرویس متفاوت هست ولی شما می توانید مقادیر رو در url به صورت post بفرستید.

  19. حسن
    ۱۵, آذر , ۱۳۹۷ در ۱۰:۰۱ ق.ظ

    سلام . ممنون از اموزش خوبتون .
    من رو عکس امتحان کردم با موفقیت آپلود شد ولی خواستم آهنگ اپلود کنم داخل برنامه اندروید گفت که انجام شد ولی رفتم داخل پوشه رو دیدم هیچی نبود و یه فایل log بود که خطا ها رو مینویسه . تو فایل log نوشته بود خط ۵ و ۶ دارای مشکل هستن . این متن کامل ارور :
    [۰۶-Dec-2018 06:06:29 UTC] PHP Notice: Undefined index: uploaded_file in /home/zahediha/public_html/UploadToServer.php on line 5
    [۰۶-Dec-2018 06:06:29 UTC] PHP Notice: Undefined index: uploaded_file in /home/zahediha/public_html/UploadToServer.php on line 6

    من از هاست سی پنل استفاده میکنم .

  20. مهدی
    ۲, اسفند , ۱۳۹۷ در ۱۲:۰۲ ق.ظ

    خسته نباشید…. با کتابخانه اندروید نتوورکینگ همه این کارها با چند خط کد ساده انجام میشه.. باهاش کار کردید؟

  21. هادی سلیمانیان
    ۴, اسفند , ۱۳۹۷ در ۱۱:۴۶ ق.ظ

    سلام وقت بخیر ببخشید کد بسیار عالی است و سرعت خیلی خوبی هم داره فقط در مورد جواب که سایت بعد آپلود فایل بهمون برمی گردونه چطور باید بگیرمش
    serverResponseMessage = connection.getResponseMessage();
    این فقط کمی از جواب بر می گردونه ولی حسون کامل بر نمی گردونه

    • محمد حسین جعفری پور
      ۷, اسفند , ۱۳۹۷ در ۲:۱۸ ب.ظ

      سلام و درود این متد به درستی کار می کند به احتمال زیاد خروجی شما مشکل دارد Log بگیرید.

      موفق و پیروز باشید.

  22. ali
    ۴, اردیبهشت , ۱۳۹۸ در ۲:۴۷ ب.ظ

    خب هاست ما یه یوزرنیم و پسورد داره ولی شما تو اموزش بهش اشاره نکردید
    همینجوری نمیشه که وصل شد به هاست

  23. علیرضا
    ۴, اردیبهشت , ۱۳۹۸ در ۷:۳۷ ب.ظ

    من طبق اموزش جلو رفتم و اطلاعات تو هاستم ذخیر میشه ولی سایز اطلاعاته ذخیره شده ۰کیلوبایته
    میشه راهنمایی کنید

  24. عرفان
    ۶, مرداد , ۱۳۹۸ در ۵:۵۴ ب.ظ

    سلام خسته نباشید بابت سایت خوبتون تشکر میکنم.من از کدای شما استفاده کردم منتهی یه مشکلی هست فایلهایی که با نام فارسی اپلود میشه هاید میشه تو Directory به این شکل نام فایل رو نمیزنه فقط پسوند رو میزنه چطور باید حلش کرد ممنون میشم راهنمایی کنید

  25. محمد
    ۱۹, مهر , ۱۳۹۸ در ۱۲:۰۹ ب.ظ

    باسلام
    ممنون بابت آموزش خوبتون.
    فقط یه مشکلی داشتم. موقع انتخاب فایل از حافظه خارجی یا از پوشه دانلود ارور Cannot upload file to server رو میده.

  26. ۸, مرداد , ۱۳۹۹ در ۱:۱۳ ب.ظ

    سلام ممنون از آموزش خوبتون – برای نمایش درصد آپلود کجارو میشه تغییر داد؟