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

آپلود فایل ،یک بار برای همیشه[آموزش]

سالار جلالی  10 سال پیش  10 سال پیش
+14 0

با سلام.

چند وقتی بود که دنبال راه حل آپلود فایل می گشتم و راهی پیدا نمیکردم ،حتی حاضر بودم سورس رو بخرم که البته قیمتای دوستان منصرف شدم.خلاصه گفتم برای بار آخر میگردم اگه تونستم کاری کنم که عالیه اگه نه  بی خیال میشم.

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

اما قبلش باید از دوست خوبم آقای @احمد اسدی تشکر کنم چون برای انتخاب تصویر از گالری از آموزش ایشون استفاده کردم.

اما آموزش:

این آموزش بدون نیاز به دونستن 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 ...");
        }

    }
	//*********************************************************************************************************************************************************//
}

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

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

یه بار دیگه تشکر میکنم از دوست خوبم آقای @احمد اسدی

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

+1 0
ایراد اساسی آموزشتون اینه که امنیت سمت سرور تا حدود (شاید کاملاً) خیلی زیادی رعایت نشده. (10 سال پیش)
+1 0
Sprit عزیز حق با شماست اما من این آموزش رو فقط برای نمونه گذاشتم تا بقیه استفاده کنند.در هر صورت تشکر میکنم از شما (10 سال پیش)
+4 0
منم زیاد از سمت سرور اطلاعاتی ندارم، ولی تا جایی که میدونم این ایراد (یعنی قرار دادن user , pass حساب ftp داخل برنامه) اصلاً توجیح پذیر نیست، هکر(برنامه نویس D:) میتونه براحتی استخراجشون کنه و ... (10 سال پیش)
0 0
همونطور که Spirit گفت ، کاری که شما انجام دادید ریسک امنیتی داره :) ، و ریسک کمی هم نیست ، اگر به هر نحوی ( چه دسترسی به ftp و چه آپلود از طریق برنامه ) یک شل روی سرور شما آپلود بشه ، امنیت کل سرور در خطر هست (10 سال پیش)
+1 0
راه منطقی تر برای این موضوع استفاده از یک فایل php هست ، شما مثل یک فرم html داده ها رو پست می کنید ، با روش تبادل Token مطمئن بشید درخواست از طرف برنامه هست نه از طرف یک فیک پیج و صفحه ی جعلی ، header های فایل رو برسی کنید و ببینید که آیا فایل مورد نظر شما هست یا نه ( مثلا عکس و فیلم ) بعد فایل رو آپلود کنید :) (10 سال پیش)
0 0
با تشکر از ALU عزیز.بله من هم متوجه شدم که امنیت این روش پایین و انشالله تو همین تاپیک تا آخر روز آپلود فایل با استفاده از php رو هم آموزشش رو می زارم. (10 سال پیش)
0 0
با تشکر از ALU عزیز.بله من هم متوجه شدم که امنیت این روش پایین و انشالله تو همین تاپیک تا آخر روز آپلود فایل با استفاده از php رو هم آموزشش رو می زارم. (10 سال پیش)
 برای این سوال پاسخی وجود ندارد.

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