الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أريد طريقة لرفع صورة على السيرفر

بدأه The.Eagle في 30 يونيو 2013 · 4 رد · 934 مشاهدة · في Android
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أريد طريقة لرفع صورة على السيرفر ؟

 

وشكرا ..

#2

ما نوع السيرفر المستخدم؟؟؟

Software Developer
Mahmoudkelany.com


 

#3

ubuntu server ونستخدم في السيرفر لغة البايثون 
أنـا أول مرة أعمل في السيرفرات وعلى الاندرويد 

 

سبق وان استخدمت الـ httpget و كنت أرسل نص عن طريق web services 

ثم أقرأ الناتج وهكذا ... ,وعملت آلة حاسبة ارسل الارقام عن طريق الرابط ثم أقرأ الـ responses 
ولكن الان أنـا لي اسبوع لا أعرف كيف أرفع اوبجيكت :( 

 

قرأت عن هذه المكتبة وهذه المرة أعتقد أنني سأستخدم الـ HttpPost 

 

ولكن لا أعرف ماذا اعمل هل اختار الصورة من الاستديو وارسل الرابط :( 
بصراحة أنـا مشتت 

http://loopj.com/android-async-http/

#4

انا لم اتعامل مع البايثون من قبل

لكن دعنى اشرح لك الفكره وقم بتحويلها بالمقابل لديك فالبايثون

الفكره هو انك فى الاندرويد تقوم بعمل تحويل الصوره الى Base64 تعملها encode

بيطلع لك النتيجه عباره عن String وهو خاص بالبيانات الخاصه بالصوره تقوم بارسال الـ String الى السيرفر

من ناحيه السيرفر تقوم باستقبال البيانات المرسله فى الـ POST لان اذا استخدمت GET ما بتشتغل لان الصوره بيكون حجمها اكبر من 4 كيلو بيت فبالتالى لابد من استخدام POST

ثم تقوم باستقبال البيانات وتحويلها للعمليه العكسيه الى Base64 وتعملها decode

وتقوم بحفظ الصوره وبالتالى تكون نقلت الصوره الى السيرفر عن طريق الموبيل

 

اذا كنت تستخدم php بدلا من python

فهذا هو الكود الخاص بالسيرفر

public function save_uploaded_image($image, $ext)
    {
        global $uploads;
        $image_name = md5(uniqid(rand(), 1)) . strtolower($ext);
        $binary = base64_decode($image);
        header('Content-Type: bitmap; charset=utf-8');
        $file = fopen($uploads . $image_name, 'wb');
        fwrite($file, $binary);
        fclose($file);
        return $image_name;
    }

هذه الداله تأخذ البيانات الخاصه بالصوره فى المتغير $image وتاخذ امتداد الصوره فى المتغير $ext

فتقوم بتحويل الصوره وحفظها فى المكان global $uploads; وتعود لك باسم الصوره حتى تقوم بحفظ اسمها ف قاعده البيانات

 

ومن ناحيه الموبيل

هذه هى الداله المسئولة عن تحويل الصوره Bitmap الى String

private String convertBitmapToString(Bitmap bitmap) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
        byte[] byte_arr = stream.toByteArray();
        return Base64.encodeBytes(byte_arr);
    }

بالتوفيق ان شاء الله

Software Developer
Mahmoudkelany.com


 

#5

أشكرك جزيل الشكر على التوضيح 
الان فهمت العملية من البداية 

 

هذا كود الاندرويد 

import java.io.ByteArrayOutputStream;
 
import java.io.InputStream;
 
import java.util.ArrayList;
import java.util.List;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;


import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Bundle;

import android.provider.MediaStore;
import android.util.Base64;
 
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity{
	Button b1;	
	TextView tv;
	private static int RESULT_LOAD_IMAGE = 1;
	String picturePath;  
	 
	Uri selectedImage;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		b1= (Button)findViewById(R.id.button1);
		b1.setOnClickListener(new OnClickListener() {			
			@Override
			public void onClick(View arg0) {				
				Intent i = new Intent(
				Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);						 
				startActivityForResult(i, RESULT_LOAD_IMAGE);							
			}
		});
				
	}
		
	private String convertBitmapToString(Bitmap bitmap) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, stream);
        byte[] byte_arr = stream.toByteArray();
        return Base64.encodeToString(byte_arr,2045);
    }
 
	
	@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
         
        if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != data) {
            selectedImage = data.getData();
            Toast.makeText(MainActivity.this, selectedImage.toString(), Toast.LENGTH_SHORT).show();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };
 
            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
            cursor.moveToFirst();
 
            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            picturePath = cursor.getString(columnIndex);
            cursor.close();
             
            ImageView imageView = (ImageView) findViewById(R.id.imageView1);
            imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
            
            String ba =  convertBitmapToString(BitmapFactory.decodeFile(picturePath)); 
            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("image1",ba));
            try{
                HttpClient httpclient = new DefaultHttpClient();
                HttpPost httppost = new HttpPost("http://172.16.1.52/...");
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
                HttpResponse response = httpclient.execute(httppost);
                HttpEntity entity = response.getEntity();
                InputStream is = entity.getContent();
                httpclient.getConnectionManager().shutdown(); 
            }
            catch(Exception e){
              Toast.makeText(getBaseContext(), "ERROR", Toast.LENGTH_LONG).show();
            }
        }
	}
}

لكن لم أستطع تشغيل كود الـ PHP   :(

أو بسبب أني لا أعرف في الـ PHP 

وكيف أستدعي الـ function

الصورة في المرفقات 

وشكرا على مساعدتك مقدما 
لم يبقى لدي سوى هذه المشكلة فقط :(

post-237117-0-17285800-1372686730_thumb.

تم تعديل هذه المشاركة بواسطة The.Eagle في 1 يوليو 2013 في 16:57

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…