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

آپلود عکس از گوشی روی دیتابیس

Amir  11 سال پیش  11 سال پیش
+5 0

سلام دوستان

اگه کسی بلد هست کامل توضیح بده ممنون میشم

فرض کنین روی یک imageView کلیک بشه و بتونم از توی گوشی یک عکس انتخاب کنم و در دیتابیس ذخیره کنم . و بعدش طبق آموزش Downloader   استاد ، از دیتابیس لینک عکس رو بگیره و دانلود کنه و نمایش بده 

تا همین جا کسی میتونه راهنمایی کنه ؟؟

مدل پیشرفته ترش هم هست که بعد از اینکه عکس رو از گوشی انتخاب کردیم ، صفحه ای باز میشه و میتونیم عکس رو EDIT کنیم مثلا Crop کنیم و بعدش آپلود کنیم !!!

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

 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
کاشی زاده  11 سال پیش
+6 0

خُب  این قضیه رو من چند وقت پیش بهش بر خوردم و راه های مختلفی هم براش وجود داره .

اول از همه اینکه شما عکس رو در دیتابیس ذخیره نکنید ، عکس رو توی هاست یا روی مموری ذخیره کنید و آدرس عکس رو داخل دیتابیس ذخیره کنید .

حالا برای انتخاب عکس و یا گرفتن عکس با دوربین دستگاه راه های زیادی هست که من توضیح نمیدم و میتونید برید در stackoverflow سرچ بزنید و راه حل دلخواهتون رو پیدا کنید .

اما برای آپلود عکس بر روی سرور شما 2 راه دارید :

اولین راه این هست که لایبری مربوط به Apache وجود داره برای ارسال اطلاعات به صورت MultiPart این امکان در اندروید دپریکیت شده و بدون استفاده از این لایبری امکان پذیر نیست .

شما باید لایبری های apache-mime4j-0.6 و httpmime-4.2.4 رو برای اندروید که به صورت jar فایل هست از لینک زیر بگیرید و به پروژتون اضافی کنید .

دانلود لایبری های آپاچی

و برای نحوه استفاده هم لینک زیر میتونید اطلاعات لازم رو کسب کنید :

لینک

در این روش شما فایل مورد نظر رو چه عکس باشه یا هر چیز دیگه رو میگیرید و برای سرور میفرستید و اونجا ذخیره میکنید.

روش دوم تبدیل فایل عکس به String هست :

در این روش شما نیازی به لایبری ندارید و میتونید با استفاده از Base64 عکس رو به بایت تبدیل کنید و برای سرور داخل یک استرینگ بفرستید و در سمت سرور دوباره به فایل برگردون کنید و ذخیره سازی .

 

فقط نکته ای که هست شما در روش اول مستقیم فایل رو میفرستید و مشکلی هم پیش نمیاد ولی در روش دوم حجم فایل شما تا 20% افزایش پیدا میکنه .

 

موفق باشید :)

 

 

پاسخ به سوال 
Amir  11 سال پیش
0 0

متاسفانه نفهمیدم :-(

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

اگه امکانش هست یک مثال بزنید ممنون میشم

اتفاقا منم قصدم همین بود که آدرس عکس به صورت String ذخیره کنم

 

مثلا قطعه کدی که میزنم اینه :

 int SELECT_IMAGE = 1;

                Intent intent = new Intent();

                intent.setType("image/*");

                intent.setAction(Intent.ACTION_GET_CONTENT);

                startActivityForResult(Intent.createChooser(intent, "Select Picture"), SELECT_IMAGE);

اون لایبراری هارو هم اضافه کردم و الان موندم چه کنم

0 0
خُب شما یکم بگردید پیدا میکنید باید عکس بعد از دریافت از گالری و یا دوربین در متد OnActivityResult دریافت کنید. (11 سال پیش)
0 0
ممنون فکر کنم تونستم اپلود کنم اما این عکسم که توی دیتابیس آپلود کردم کجا رفت ؟!!! من دیتابیسی دارم که مثلا عنوان عکس هم توش به صورت String ذخیره شده . عکس در کد php به جای request به صورت FILE گرفتم و ذخیره کردم .اما این فایل کجا رفت ؟!!!! چه جوری به ترتیبی که عنوان ها هستن ، دانلود کنم . گیج شدم (11 سال پیش)
0 0
خب ، تو کد php بهش میگید کجا ذخیره بشه ، اگر پیدا نکردید کد آپاود عکس رو اینجا بذارید تا بررسی کنیم . (11 سال پیش)
پاسخ به سوال 
Amir  11 سال پیش
+1 0

بنده طبق توضیحات یکی از دوستان در این لینک اومدم یک کلاس uploadFile نوشتم و در اونجا اون فایلی که از گوشی میگیره رو آپلود میکنم :

 package com.blogfa.iranianpopstars.course.app.billboard;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;


public class UploadFiles {

    private static String Result = "";


    public static String upload(String selectedPath) {

        HttpURLConnection connection = null;
        DataOutputStream outputStream = null;

        String FilePath = selectedPath;
        String urlServer = "http://192.168.56.1/note-server/service.php";
        String lineEnd = "\r\n";

        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 8 * 1024;

        try {
            FileInputStream fileInputStream = new FileInputStream(new File(FilePath));

            URL url = new URL(urlServer);
            connection = (HttpURLConnection) url.openConnection();

            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setUseCaches(false);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=");
            outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.writeBytes("--" + lineEnd);
            outputStream.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + FilePath + "\"" + lineEnd);
            outputStream.writeBytes(lineEnd);

            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            buffer = new byte[bufferSize];

            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

            while (bytesRead > 0) {
                outputStream.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            }

            outputStream.writeBytes(lineEnd);
            outputStream.writeBytes("----" + lineEnd);

            InputStream InStream = connection.getInputStream();
            Result = InputStreamToString(InStream);
            fileInputStream.close();
            outputStream.flush();
            outputStream.close();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return Result;
    }


    private static String InputStreamToString(InputStream inStream) {

        BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
        StringBuilder builder = new StringBuilder();
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                builder.append(line);
            }
            return builder.toString();
        }
        catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                reader.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            try {
                inStream.close();
            }
            catch (IOException e) {
                e.printStackTrace();
            }

        }
        return "";
    }
}

 

حالا توی ActivityMain این جوری نوشتم :

  String                    selectedImagePath;
    private static final int  SELECT_IMAGE = 1;
    Thread                    ThreadUpload;


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == RESULT_OK) {
            if (requestCode == SELECT_IMAGE) {
                Uri selectedImageUri = data.getData();
                selectedImagePath = getPath(selectedImageUri);
            }
        }
    }





chooseImage.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                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 v) {
                if (selectedImagePath != null) {
                     progress.setVisibility(View.VISIBLE);
                      btnUpload.setEnabled(false);
                     ThreadUpload = new Thread(new Runnable() {

                         @Override
                         public void run() {
                              final String response = UploadFiles.upload(selectedImagePath);
                             ActivityMain.handler.post(new Runnable() {

                                 @Override
                                 public void run() {
                                     try {

                                         int intRes = Integer.parseInt(response);
                                         switch (intRes) {
                                             case 1:
                                                 Toast.makeText(getApplicationContext(), "File Uploaded !", Toast.LENGTH_LONG).show();
                                                 break;

                                             case 2:
                                                 Toast.makeText(getApplicationContext(), "File Not Uploaded !", Toast.LENGTH_LONG).show();
                                                 break;
                                             default:
                                                 Toast.makeText(getApplicationContext(), "Unkown Error , Try Again", Toast.LENGTH_LONG).show();
                                         }
                                         progress.setVisibility(View.GONE);
                                         // btnUpload.setEnabled(true);
                                     }
                                     catch (Exception e) {
                                         e.printStackTrace();
                                     }
                                 }
                             });

                         }
                     });
                     ThreadUpload.start();

                 }
                 else {
                     Toast.makeText(getApplicationContext(), "Please Select a File First !", Toast.LENGTH_SHORT).show();
                 }
و در نهایت کد پی اچ پی که اصلا نفهمیدم چی هست
احتمال زیاد من توی کارم اشتباه کردم و شاید چیزی از قلم افتاده
این کد پی اچ پی:
 <?php
if (isset($_FILES['file'])){
    $target_path = "";//path like "../uploads/images/"
    $target_path = $target_path . basename($_FILES['file']['name']);
    $img_url = $target_path;
    if (move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
        die("1");
    } else {
        die("2");
}

 حالا اینکه چطوری تعیین کنم عکس کجا میره و ... خدا داند. اما بعد از آپلود اون قسمت که در activityMain هست و سوییچ کرده ، قسمت اول سوویچ اجرا میشه یعنی میگه عکس آپلود شد ...

 


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