آموزش آپلود عکس به دیتابیس Mysql در اندروید
سلام دوستان امیدوارم حالتون خوب باشد در این سری از آموزش برنامه نویسی اندروید به آموزش آپلود عکس به دیتابیس Mysql در اندروید می پردازیم در آموزش آپلود عکس به سرور ما یک دیتابیس داریم که بعد از آپلود آدرس عکس را برای ما نگه می دارد و این کار توسط یک فایل php انجام می شود در ادامه با ما همراه باشید.
ابتدا به یک دیتابیس نیاز داریم پس یک جدول (table) در mysql به نام check با دو فیلد ایجاد کرده نام فیلد اول را برابر با id و auto increment یا ai قرار داده و فیلد بعدی را برابر با image قرار دهید عکس زیر شاید بتواند به درک بهتر شما کمک کند. id را باید Primary key قرار دهید.
در بالا insert انجام شده است شما نباید مقداری در فیلد های بالا Insert کنید.
خب باید یک فایل php برای آپلود فایل ایجاد کنیم نام فایل ما برابر با Upload.php است بعد از ایجاد فایل کدهای زیر را در آن قرار دهید.
در بالا عمل post انجام می شود . قبل از توضیح دادن ادامه شما باید یک پوشه داشته باشید مثلا نام پوشه ما در اینجا برابر با myimage است بعد از اینکار یک پوشه دیگر به نام uploads در پوشه قبلی قرار دهید در بالا باید به جای $user یوزنیم دیتابیس خودتان و به جای $pass پسورد دیتابیس را قرار دهید . در صورتی که فایل به درستی آپلود شود پیام Successfully Uploaded و در غیر اینصورت Error نمایش داده می شود. در بالا query که این کار را انجام می دهد یک Insert به دیتابیس انجام میدهد یعنی ابتدا فایل آپلود می شود سپس مسیر آن به دست آمده و در mysql ما insert می شود نام هر فایل هم همان آیدی می شود تا راحتر بشود آنها را مدیریت کنیم.
برویم به سراغ کد های برنامه
ابتدا وارد فایل Build.gradle از نوع Module شده سپس در بخش dependencies کتاب خانه زیر را اضافه کنید.
پروژه را sync کنید.
وارد فایل AndroidManifest.xml شده و دسترسی های زیر را به آن اضافه کنید.
در layout اصلی که در اینجا نام آن برابر با activity_main.xml است یک ImageView و یک Button همانند زیر قرار دهید.
ImageView برای نمایش عکس و Button برای آپلود عکس است.
فایل php در آدرس زیر قرار گرفته است (برای مثال می گوییم همچین فایلی به خاطر مسائل امنیتی قرار گرفته نمی شود)
و درآخر کدهای زیر را در MainActivity.java قرار دهید (نیازی به کلاس دیگری نیست)
برای آپلود فایل ابتدا شما باید بروی ImageView کلیک کنید با کلیک بروی آن Gallery نمایش داده می شود onActivityResult به این منظور است که وقتی عکسی از Gallery انتخاب شد ما آدرس آن عکس را به دست بیاریم و بخش مهم کار این جاست که نمی شود عکس را دیتابیس قرار داد پس باید عکس تبدیل به متن شود برای اینکار ما از Void ی به نام getStringImage استفاده کردیم در این آموزش ما از RunTimePermission نیز استفاده کرده ایم البته در صورتی که api گوشی کاربر بالای 23 باشد نمایش داده می شود در غیر اینصورت اتفاقی نمی افتد. با کلیک بروی Imageview بالا void ی به نام showFileChooser نمایش داده می شود که قبلتر آن را توضیح دادیم برای چه کاری است.
در این آموزش با استفاده از volley عمل آپلود را انجام میدهیم یعنی عکس را به فایل php که ساختیم post کرده سپس از آنجا در mysql قرار می گیرد (منظور همان آدرس است)
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام، متشکر بابت آموزش های خوبتون.
یک سوال داشتم:
وقتی کاربر وارد اپ میشه ما اطلاعات رو از سمت سرور میگیریم و بهش نشون میدیم، حالا هر موقع که کاربر از اپ خارج شد و دوباره وارد شد منطقی اینه که دوباره همه اطلاعات از سرور درخواست نشه و فقط اون اطلاعاتی که جدیدا اضافه شده از سرور گرفته بشه و به recyclerView اضافه بشه که هم سرعت آپدیت اطلاعات بالا بره و هم دیتای کمتری از اینترنت کاربر مصرف بشه.
آیا نیاز هست که اول اطلاعات رو در گوشی کاربر به وسیله SQlite ذخیره کنیم و بعد id اون رو با id سمت سرور مقایسه کنیم یا کار دیگه ای باید انجام بشه؟
روش استاندارد برای این کار چی هست؟
لطف می کنید راه حل رو توضیح مختصر بدید.
سلام
سوال من هم هست 🙂
اگر میشه راهنمایی بفرمایید
سلام دقیقا چیزی که گفتید باید همین کار انجام شود.
یه سوال دیگه هم داشتم، برای آپلود فایل باید چیکار کرد؟ مثلا آپلود فایل pdf و یا word
آیا نحوه ارسال اونها با volley متفاوت هست؟
متشکر
سلام
خیر متفاوت نیست.
سلام
واسه ارسال عکس با حجم بالا باید چیکار کرد؟
من عکس با حجم 2مگ میفرستم برنامه کرش میکنه
ولی عکس زیر 1 مگ رو راحت میفرسته
با سلام وخسته نباشید
آقا آموزش تون واقعا عالی بود.
خواهش می کنم موفق باشید.
دستتون درد نکنه خیلی جالب بود
سلام ممنون از آموزشتون
من طبق آموزش شما پیش رفتم ولی با خطای
BasicNetwork.performRequest: Unexpected response code 500 for …
در logcat مواجه میشم. و در toast هم پیغام ServerError یا TimeoutError میده
میشه راهنمایی کنین مشکل از کجاست؟ ممنون
سلام ممنون بابت اموزش خوبتون
سوالی که داشتم اینه که من با همین روش اپلود میکنم عکسم رو ولی وقتی میرم روی هاست میبینم که عکسم حجمش حدود 10 برابر شده روی هاست
و بهمین دلیل هم در اپلود روی سرور بعضا با ارور null هم روبرو میشم!
میخواستم ببینم علیت این افزایش حجم چیه و چطور میشه مشکل رو حل کرد؟؟