السلام عليكم
أريد طريقة لرفع صورة على السيرفر ؟
وشكرا ..
السلام عليكم
أريد طريقة لرفع صورة على السيرفر ؟
وشكرا ..
ubuntu server ونستخدم في السيرفر لغة البايثون
أنـا أول مرة أعمل في السيرفرات وعلى الاندرويد
سبق وان استخدمت الـ httpget و كنت أرسل نص عن طريق web services
ثم أقرأ الناتج وهكذا ... ,وعملت آلة حاسبة ارسل الارقام عن طريق الرابط ثم أقرأ الـ responses
ولكن الان أنـا لي اسبوع لا أعرف كيف أرفع اوبجيكت :(
قرأت عن هذه المكتبة وهذه المرة أعتقد أنني سأستخدم الـ HttpPost
ولكن لا أعرف ماذا اعمل هل اختار الصورة من الاستديو وارسل الرابط :(
بصراحة أنـا مشتت
انا لم اتعامل مع البايثون من قبل
لكن دعنى اشرح لك الفكره وقم بتحويلها بالمقابل لديك فالبايثون
الفكره هو انك فى الاندرويد تقوم بعمل تحويل الصوره الى 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);
}بالتوفيق ان شاء الله
أشكرك جزيل الشكر على التوضيح
الان فهمت العملية من البداية
هذا كود الاندرويد
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
الصورة في المرفقات
وشكرا على مساعدتك مقدما
لم يبقى لدي سوى هذه المشكلة فقط :(
تم تعديل هذه المشاركة بواسطة The.Eagle في 1 يوليو 2013 في 16:57
المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية
جارٍ التحقق من المتواجدين…