آپلود فایل ،یک بار برای همیشه[آموزش]
با سلام.
چند وقتی بود که دنبال راه حل آپلود فایل می گشتم و راهی پیدا نمیکردم ،حتی حاضر بودم سورس رو بخرم که البته قیمتای دوستان منصرف شدم.خلاصه گفتم برای بار آخر میگردم اگه تونستم کاری کنم که عالیه اگه نه بی خیال میشم.
حالا یه راه عالی پیدا کردم و دلم نیومد که اینجا نزارمش .راستش اول می خواستم آموزش ویدئویی بسازم براش اما وقتش نبود برای همین یه سمپل ساختم ولینکشو پایین تر برای دانلود می زارم.
اما قبلش باید از دوست خوبم آقای @احمد اسدی تشکر کنم چون برای انتخاب تصویر از گالری از آموزش ایشون استفاده کردم.
اما آموزش:
این آموزش بدون نیاز به دونستن php هست و همه کد ها سمت اپلیکیشن اجرا میشن.
بخش اول (سمت سرور):
تنها کاری که باید بکنید اینه که سرویس ftp سایتتون رو راه بندازین تا یه username , password بهتون بده .
برای این کار وارد cpanel میشید و روی FTP Account کلیک می کنید بعدشم سرویس رو راه اندازی میکنین. به همین راحتی.
بخش دوم(اندروید):
مرحله اول اینه که لایبرری ftp4j.-1.6-jar رو به برنامتون اضافه میکنید.لینک دانلودش در آخر آموزش قرار داده میشه.
مرحبه بعد اینه که permission اینترنت رو از کاربر در خواست میکننین.
<uses-permission android:name="android.permission.INTERNET" />
بعد layout برنامه ،البته این برای نمونه است و آموزشی ،شما باید نسبت به نیازتون تغییرش بدین.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" android:orientation="vertical" > <ImageView android:id="@+id/imageView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <Button android:id="@+id/btnchoose" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="انتخاب عکس" /> <Button android:id="@+id/btnupload" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="آپلود" /> </LinearLayout>
حالا بریم سراغ کد Activity
package ir.sinjimtech.fileuploadsample; import it.sauronsoftware.ftp4j.FTPClient; import it.sauronsoftware.ftp4j.FTPDataTransferListener; import java.io.File; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.Toast; public class FileUploadSampleActivity extends Activity { static final String FTP_HOST = "5.144.130.38";//آی پی سایت شما static final String FTP_USER = "xxxxxxx";//FTP UserName static final String FTP_PASS = "xxxxxxxxxx";//FTP Password String pathToOurFile; //برای قرار دادن مسیر فایل انتخاب شده از گالری private static final int SELECT_IMAGE = 1; //دریافت کد تصویر انتخاب شده در گالری Button btnchoose, btnupload; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); btnchoose = (Button) findViewById(R.id.btnchoose); btnupload = (Button) findViewById(R.id.btnupload); btnchoose.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //***********************************************// Intent intent_gallery = new Intent(); intent_gallery.setType("image/*"); //از این قطعه کد برای انتخاب تصویر از گالری استفاده میشه intent_gallery.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(intent_gallery, SELECT_IMAGE); //**************************************************// } }); btnupload.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { //*********************************// //قطعه کد زیر برای استفاده از متد آپلود استفاده میشه// File f = new File(pathToOurFile); //آدرس فایل انتخاب شده ربه بدنه فایل ارسال میکنه uploadFile(f);//هتد ی که برای آپلود فایل نوشته شده رو فراخوانی می کند //*******************************// } }); } //************************************ بعد از انتخاب تصویر از گالری عکس رو نمایش میده و آدرس عکس رو هم ذخیره می کنه *******************************// @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == SELECT_IMAGE && resultCode == RESULT_OK && null != data) { //اگر عکس انتخاب شده بود Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); ImageView imageView = (ImageView) findViewById(R.id.imageView1); //نمایش عکس انتخاب شده در برنامه imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); pathToOurFile = picturePath; // قرار دادن مسیر عکس Toast.makeText(getApplicationContext(), picturePath, Toast.LENGTH_LONG).show(); } } //********************************************************************************************************************************************************// //***********************************برای آپلود فایل از قطعه کد زیر استفاده میشه *********************************************************************// public void uploadFile(File fileName) { FTPClient client = new FTPClient(); try { client.connect(FTP_HOST, 21); client.login(FTP_USER, FTP_PASS); client.setType(FTPClient.TYPE_BINARY); client.changeDirectory("/upload/"); client.upload(fileName, new MyTransferListener()); } catch (Exception e) { e.printStackTrace(); try { client.disconnect(true); } catch (Exception e2) { e2.printStackTrace(); } } } //*********************************************************************************************************************************************************// //*********************************************************************************************************************************************************// // این هم لیسنر انتقال اطلاعات // public class MyTransferListener implements FTPDataTransferListener { @Override public void started() { btnupload.setVisibility(View.GONE); // Transfer started Toast.makeText(getBaseContext(), " Upload Started ...", Toast.LENGTH_SHORT).show(); //System.out.println(" Upload Started ..."); } @Override public void transferred(int length) { // Yet other length bytes has been transferred since the last time this // method was called Toast.makeText(getBaseContext(), " transferred ..." + length, Toast.LENGTH_SHORT).show(); //System.out.println(" transferred ..." + length); } @Override public void completed() { btnupload.setVisibility(View.VISIBLE); // Transfer completed Toast.makeText(getBaseContext(), " completed ...", Toast.LENGTH_SHORT).show(); //System.out.println(" completed ..." ); } @Override public void aborted() { btnupload.setVisibility(View.VISIBLE); // Transfer aborted Toast.makeText(getBaseContext()," transfer aborted ,please try again...", Toast.LENGTH_SHORT).show(); //System.out.println(" aborted ..." ); } @Override public void failed() { btnupload.setVisibility(View.VISIBLE); // Transfer failed System.out.println(" failed ..."); } } //*********************************************************************************************************************************************************// }
وتمام حالا میتونین برنامه رو تست کنید .
اگر اشکالی بود یا سوالی داشتین به صورت پیام خصوصی برام بفرستین.
یه بار دیگه تشکر میکنم از دوست خوبم آقای @احمد اسدی
اینم لینک برنامه سمپل و لایبرری مورد نیاز:نمونه برنامه آپلود فایل







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