اپلود عکس به سرور در اندروید
سلام
با سری از آموزش های اندروید باز برگشیتم این بار می خواهیم اپلود عکس به سرور رو آموزش بدیم.جزو سری از آموزش های پر مخاطب هست.
خب اول کار ما باید بخش اتصال به سرور رو درست کنیم ما برای این کار از xampp استفاده میکنیم و فرقی نمیکه با چه برنامه ای شما این کار رو می کنید و بگم این آموزش رو در سمت سرور نیز می تونید پیاده سازی کنید چون هیچ چیزی فرق نمی کنه در دو طرف. خب یک فایل به نام dbDetails.php ایجاد کنید و اطلاعات زیر را در آن وارد کنید.
در بالا شما باید اطلاعات دیتابیسی که ساختید را قرار بدید (برای ایجاد دیتابیس یه سرچ کوچک بکنید !). (localhost نیاز به تغییر ندارد !)
بخش دیتا بیس به شکل زیر می شود. همه چیز را همانند شکل زیر تنظیم کنید.

سپس یه فایل به نام upload.php ایجاد کرده و کد زیر را در آن قرار دهید.
ما در اینجا از یک script که به زبان php نوشته شده است برای اپلود عکس استفاده می کنیم.
حالا زمان تست script رسیده است ما با استفاده از rest client به نام postman این بخش را چک می کنم.
در بالا ما یک عکس را انتخاب کرده و به sctipt خود ارسال می کنیم
اگر دیتا به دیتابیس ارسال شود شما می توانید با چک کردن دیتابیس از کارکردن کد خود اطمینان خاطر پیدا کنید.
فایل دوم برای دریافت عکس است پس یک فایل به نام getImages.php ایجاد کرده و کد های زیر را در آن قرار دهید.
همانطور که گفتیم کد بالا برای دریافت عکس مورد استفاده قرار می گیرد.
خب بخش php به پایان رسید حالا زمان ساخت پروژه اندرویدیست یک پروژه ایجاد کرده و یک کلاس به نام Constants.java ایجاد کرده و کد زیرا را در آن قرار دهید.
دقت کنید در بالا ایپی local من قرار دارد برای به دست اوردن ایپی local خود در cmd کد IPCONFIG را تایپ کرده و ایپی خود را جایگزین کنید. و دقت کنید فایل ها را من در فولدری به نام AndroidImageUpload قرار داده ام.
حالا فایل build.gradle را باز کرده و به این شکل تغییر دهید.
فقط باید یک خط بالا را قرار دهید براتون کامنت گذاشتم پروژه را بزنید sync شود (در صورتی که در sync شدن برنامه مشکل دارید این مطلب را مطالعه کنید).
تا اینجا که خوب پیش رفتیم
فایل activity_main.xml ما به این شکل می شود.
و بخش Mainactivity.java
برای کاربران توضیحات اضافی رو کامنت کردم !
و در آخر باید دسترسی یا Permission های زیر را به بخش AndroidManifest.xml اضافه کنیم که به شکل زیر می شود.
و تمام شد ! wow
انشاالله آموزش کامل و جامع و مفیدی بوده باشه.
سلام
در قسمت Constants.java فایل getiamge.php تو سایت در این قسمت آورده نشده مثل فایل آپلود بدون این فایل چطور اطلاعاتو بگیریم از سرور.لطفا کامل کنید ممنون.
کد تکمیل شد .
سلام خسته نباشید
ولی هیچ جا از IMAGES_URL که در Constants قرار دادید استفاده نشده !
سلام خسته نباشید
من در این اموزش یه مشکل دارم که داخل سایر اموزش های آپلود کردن عکس و متن به سرور داشتم
اپلود انجام میشه و در برنامه پیغام موفقیت آپلود داده میشه !
در جدول دیتا بیس یه سطر جدید با آیدی جدید و عنوان ارسالی و لینک عکس وجود داره و اضافه شده !
ولی من به عکس ارسالی دسترسی ندارم ! یعنی اون لینک هم فقط ایجاد شده و در اون مسیر عکسی وجود نداره !
اون عکس باید داخل همون فولدر داخل هاست باشه ؟ فولدر به صورت ساب دامین درست کردم !
ممنون میشم راهنمایی کنید .
سلام و تشکر
یه سوال داشتم برای اینکه متن فارسی بشه ارسال کرد باید چیکار کرد ؟
البته ارسال میشه ولی موقع نمایش به جاش علامت سوال میزاره
داخل جدول برای قسمت عنوان utf8_persian_ci فعال کردم
ولی انگار باید داخل کد تغییری داد !
خواهشا راهنمایی کنید ممنون .
این کد رو یه لاین قبل از کوئزی قرار بده: $conn->set_charset(“utf8”);
سلام خیلی ممنون بابت اموزش عالی
دو سوال داشتم. اگر بخواهم که قبل از ارسال نام عکس را عوض کنم که مانند اپ های اگهی اگر کاربر ها تصاویر اپلود کردند نام یکسان مشکلی ایجاد نکند باید به چه صورت عمل کنم و بهترین کار تعویض نام در سمت اپ اندرویدی هست و یا سرور؟
سوال دوم
برای اپلود اگر نیاز باشد که تصویرم را کامپرس کنم باید به چه صورت عمل کنم جستجو هایی کردم منتها در ان ها یک تصویر را فشرده می کردند و در یک شی از نوع بیت مپ می ریختند دیگر نمی دانم باید ادرس ان بیتمپ فشرده شده را بگیرم و ارسال کنم و بعد ان را پاک کنم و یا اینکه چه مسیری را باید بروم ممنون می شم استاد عزیز راهنمایی بفرمایید.
خدا قوت
سلام و دورد
در جواب سوال اول شما می توانید نام فایل را همین طرف ویراش کرده سپس آن را ارسال کنید.
و در جواب به سوال دوم فشرده سازی قبلا در سایت قرار گرفته است از جستجو کنید (فشرده سازی عکس)
موفق باشید.
ممنون بابت پاسخگویی بنده بررسی کردم اموزش فشرده سازی را منتها یک مشکلی هست وقتی عکس را از گالری انتخاب می کنم ان را به داخل متد فشرده سازی ارسال می کنم و یک بیتمپ دارم منتها برای ارسال مولتی پارت نیاز به یک ادرس دارم که برای ان هم URI را به ادرس تبدیل می کنم منتها عکس فشرده شده که یک ابجکت بیتمپ هست را نمی دنم به چه صورتی ادرسش را بدست بیاورم که بتوانم آن را به صورت مولتی پارت اپلود کنم
سلام .من احتیاج به کمک دارم…
کدهارو اضافه کردم..همه چیز اکیه…
حالا کد Php رو که با postman تست میکنم عکس ذخیره میشه..ولی از سمت اپ اندرویدم نه!
ازسمت برنامه که تست میکنم جدول image فقط آپدیت میشه و عکسی ذخیره نمیشه..
سلام کد بررسی شده و مشکلی ندارد به صورت debug جلو رفته و خطا داخلی رو حل کنید و runtime permission برای اندروید 6 به بالا فراموش نشود.
موفق باشید.
سلام خسته نباشید در این جا دقیقا چه مشخصاتی باید وار بشه؟
دراجرا این خطارو میده
Warning: mysqli_connect(): (28000/1045): Access denied for user 'android'@'localhost' (using password: YES) in /home/biterium/public_html/getImages.php on line 5
Unable to Connect…
اگر در local دارید تست می گیرید که باید از مشخصات دیتابیسی را که در xampp یا wamp درست کردید قرار دهید به ترتیت از بالا به پایین
localhost
نام یوزر دیتابیستون
پسورد یوزر دیتابیستون
نام اصلی دیتابیستون
اگر در سرور در حال تست گیری هستید باید اطلاعات مورد نظر دیتابیسی که در سرور ساختید را قرار دهید.
چرا هیچ کجا از این دستور استفاده نشده؟
public static final String IMAGES_URL = “http://www/getImages.php”;
می تونید استفاده کنید !
همه چی به خوبی کار میکنه فقط درون دیتابیس اضافه نمیشه
#1048 – Column ‘id’ cannot be null
null قبول نمیکنه شماره هم میدم بجای null فقط یکی ساخته میشه
باید auto generate قرار دهید.
با سلام و تشکر از شما
من انجام دادم موفق شدم اپلود کنم
ولی سرور ما احراز هویت رو عوض کرد هر کاری میکنم درست نمیشه مثل قبل
“Cookie” , “PHP_AUTH_USER=”+Global.user.toString()+”; PHP_AUTH_PW=”+Global.pass.toString()
این احراز هوین منه
نمیدونم باید چطوری توی multipart بنویسم
اگه راهنماییم کنید ممنون میشم
سلام و درود
شما باید کلید هر user یا کلید کلی رو با url ارسال کنید تا اهراز هویت بشه.
با سلام و تشکر
پس از اپلود عکس قراره که بیشترین ip جدول و بگیره ،یکی اضافه کنه ولی هر آپلود جایگزین قبلی با همون نام میشه ، یعنی هر عکس با نام 1.jpg ذخیره میشه و جایگزین قبلی میشه،مشکل کجاست ؟ممنون از شما