Android-将图像文件发送到服务器数据库

Android-将图像文件发送到服务器数据库,android,client-server,http-post,image-file,Android,Client Server,Http Post,Image File,用户保存三个数据: 名称、注释和图像。正如您可以看到下面的代码一样, 我成功地编写代码将名称和注释发送到服务器端。 但是,我不知道如何将选定的图像文件从设备发送到serverDB public class AddEditWishlists extends Activity { // Client-Server - Start ////////////////////// // Progress Dialog private ProgressDialog pDialog;

用户保存三个数据: 名称、注释和图像。正如您可以看到下面的代码一样, 我成功地编写代码将名称和注释发送到服务器端。 但是,我不知道如何将选定的图像文件从设备发送到serverDB

public class AddEditWishlists extends Activity {

    // Client-Server - Start //////////////////////
    // Progress Dialog
    private ProgressDialog pDialog;

    JSONParser jsonParser = new JSONParser();
    EditText inputName;
    EditText inputDesc;

    // url to create new product
    private static String url_create_product = 
        "http://10.56.43.91/android_connect/create_product.php";


    // JSON Node names
    private static final String TAG_SUCCESS = "success";
    // Client-Server - End //////////////////////


    //Define Variables
    private EditText inputname;
    private EditText inputnote;
    private Button upload;
    private Bitmap yourSelectedImage;
    private ImageView inputphoto;
    private Button save;
    private int id;
    private byte[] blob=null;
    byte[] image=null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.add_wishlist);
        setUpViews();
    }

    private void setUpViews() {

        inputname = (EditText) findViewById(R.id.inputname);
        inputnote = (EditText) findViewById(R.id.inputnote);
        inputphoto = (ImageView) findViewById(R.id.inputphoto); 

        Bundle extras = getIntent().getExtras();

        if (extras != null) {
            id=extras.getInt("id");
            inputname.setText(extras.getString("name"));
            inputnote.setText(extras.getString("note"));

            image = extras.getByteArray("blob");

            if (image != null) {
                if (image.length > 3) {
                    inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length));
                }
            }

        }



        //Image Upload Button
        upload = (Button) findViewById(R.id.upload);
        upload.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType("image/*");
                startActivityForResult(intent, 0);
            }
        });

        // Save the data
        save = (Button) findViewById(R.id.save);

        // Save하면 발생되는 이벤트
        save.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                if (inputname.getText().length() != 0) {
                    AsyncTask<Object, Object, Object> saveContactTask = new AsyncTask<Object, Object, Object>() {
                        @Override
                        protected Object doInBackground(Object... params) {
                            saveContact();

                            // Client-Server - Start //////////////////////////////////////
                            String name = inputname.getText().toString();
                            String description = inputnote.getText().toString();


                            // Building Parameters
                            List<NameValuePair> params1 = new ArrayList<NameValuePair>();
                            params1.add(new BasicNameValuePair("name", name));
                            params1.add(new BasicNameValuePair("description", description));

                            // getting JSON Object
                            // Note that create product url accepts POST method
                            JSONObject json = jsonParser.makeHttpRequest(url_create_product, "POST", params1);

                            // check log cat fro response
                            Log.d("Create Response", json.toString());

                            // check for success tag
                            try {
                                int success = json.getInt(TAG_SUCCESS);

                                if (success == 1) {
                                    // successfully created product
                                    // closing this screen
                                    finish();
                                } else {
                                    // failed to create product
                                }
                            } catch (JSONException e) {
                                e.printStackTrace();
                            }

                            // Client-Server - End ////////////////////////////////////

                            return null;
                        }

                        @Override
                        protected void onPostExecute(Object result) {
                            finish();
                        }
                    };

                    saveContactTask.execute((Object[]) null);

                } else {
                    AlertDialog.Builder alert = new AlertDialog.Builder(
                            AddEditWishlists.this);
                    alert.setTitle("Error In Save Wish List");
                    alert.setMessage("You need to Enter Name of the Product");
                    alert.setPositiveButton("OK", null);
                    alert.show();
                }
            }
        });
    }


    // If users save data, this will act (data -> db) 
    private void saveContact() {

        if(yourSelectedImage!=null){
            ByteArrayOutputStream outStr = new ByteArrayOutputStream();
            yourSelectedImage.compress(CompressFormat.JPEG, 100, outStr);
            blob = outStr.toByteArray();
        }

        else{blob=image;}

        // Change Text type to string type to save in the DB
        SQLiteConnector sqlCon = new SQLiteConnector(this);

        if (getIntent().getExtras() == null) {
            sqlCon.insertWishlist(inputname.getText().toString(), inputnote.getText().toString(), blob);
        }

        else {
            sqlCon.updateWishlist(id, inputname.getText().toString(), inputnote.getText().toString(),blob);
        }


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode,Intent resultdata) {
        super.onActivityResult(requestCode, resultCode, resultdata);
        switch (requestCode) {
        case 0:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = resultdata.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 filePath = cursor.getString(columnIndex);

                cursor.close();
                // Convert file path into bitmap image using below line.
                yourSelectedImage = BitmapFactory.decodeFile(filePath);
                inputphoto.setImageBitmap(yourSelectedImage);
            }

        }
    }

}
公共类additWishList扩展活动{
//客户端服务器-启动//////////////////////
//进度对话框
私人对话;
JSONParser JSONParser=新的JSONParser();
编辑文本输入名;
编辑文本输入描述;
//创建新产品的url
私有静态字符串url\u创建\u产品=
"http://10.56.43.91/android_connect/create_product.php";
//JSON节点名称
私有静态最终字符串标记_SUCCESS=“SUCCESS”;
//客户端-服务器端//////////////////////
//定义变量
私有编辑文本输入名;
私人编辑文本输入注释;
私人按钮上传;
您选择的私有位图图像;
私有图像视图输入照片;
私人按钮保存;
私有int-id;
私有字节[]blob=null;
字节[]图像=空;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.add_wishlist);
setupview();
}
私有void setUpViews(){
inputname=(EditText)findViewById(R.id.inputname);
inputnote=(EditText)findViewById(R.id.inputnote);
inputphoto=(ImageView)findViewById(R.id.inputphoto);
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
id=额外的getInt(“id”);
inputname.setText(extras.getString(“名称”));
inputnote.setText(extras.getString(“注释”));
image=extras.getByteArray(“blob”);
如果(图像!=null){
如果(image.length>3){
inputphoto.setImageBitmap(BitmapFactory.decodeByteArray(image,0,image.length));
}
}
}
//图像上传按钮
upload=(按钮)findViewById(R.id.upload);
upload.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
意向意向=新意向(意向.行动\u获取\u内容);
intent.setType(“image/*”);
startActivityForResult(意向,0);
}
});
//保存数据
save=(按钮)findViewById(R.id.save);
//拯救하면 발생되는 이벤트
save.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(inputname.getText().length()!=0){
AsyncTask saveContactTask=新建AsyncTask(){
@凌驾
受保护对象doInBackground(对象…参数){
saveContact();
//客户端服务器-启动//////////////////////////////////////
字符串名称=inputname.getText().toString();
字符串描述=inputnote.getText().toString();
//建筑参数
List params1=new ArrayList();
参数1.add(新的BasicNameValuePair(“name”,name));
参数1.add(新的BasicNameValuePair(“说明”,说明));
//获取JSON对象
//请注意,创建产品url接受POST方法
JSONObject json=jsonParser.makeHttpRequest(url\u create\u product,“POST”,params1);
//检查cat fro响应日志
d(“创建响应”,json.toString());
//检查成功标签
试一试{
int success=json.getInt(TAG_success);
如果(成功==1){
//已成功创建产品
//关闭此屏幕
完成();
}否则{
//未能创建产品
}
}捕获(JSONException e){
e、 printStackTrace();
}
//客户端-服务器端////////////////////////////////////
返回null;
}
@凌驾
受保护的void onPostExecute(对象结果){
完成();
}
};
saveContactTask.execute((Object[])null;
}否则{
AlertDialog.Builder alert=新建AlertDialog.Builder(
增列了以下内容:;
alert.setTitle(“保存愿望列表中的错误”);
setMessage(“您需要输入产品名称”);
alert.setPositiveButton(“确定”,空);
alert.show();
}
}
});
}
//如果用户保存数据,这将起作用(数据->数据库)
私有void saveContact(){
如果(您选择的图像!=null){
ByteArrayOutputStream Outtr=新建ByteArrayOutputStream();
选择edimage.compress(CompressFormat.JPEG,100,outtr);
blob=outtr.toByteArray();
}
else{blob=image;}
//将文本类型更改为字符串类型以保存在数据库中
SQLiteConnector sqlCon=新SQLiteConnector(此);
if(getIntent().getExtras()==null){
sqlCon.insertWishlist(inputname.getText().toString(),inputnote.getText().toString(),blob);
}
否则{
sqlCon.updateWi
imageView.buildDrawingCache();
Bitmap bm = imageView.getDrawingCache();
ByteArrayOutputStream baos = new ByteArrayOutputStream();  
bm.compress(Bitmap.CompressFormat.JPEG, 100, baos); //bm is the bitmap object   
byte[] b = baos.toByteArray();

String encodedImage = Base64.encodeToString(b , Base64.DEFAULT);
image = extras.getByteArray("blob");
String encodedImage = Base64.encodeToString(image , Base64.DEFAULT);
public class PhotosActivity extends Activity {
    ImageView img, img1;
    int column_index;
    Intent intent = null;
    Bitmap bitmap = null;
    FileInputStream in1, in2, in3;
    BufferedInputStream buf;
    // Declare our Views, so we can access them later
    String logo, imagePath, Logo;
    Cursor cursor;

    private String Tag = "UPLOADER";
    private String urlString = "YOUR_ONLINE_PHP";
    HttpURLConnection conn;
    // YOU CAN EDIT THIS TO WHATEVER YOU WANT
    private static final int SELECT_PICTURE = 1;

    String selectedImagePath;
    // ADDED
    String filemanagerstring;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.photos1_layout);
        // ListView iv= (ListView)findViewById(R.id.listView1);
        // iv.setAdapter(new ArrayAdapter(this,
        // android.R.layout.simple_list_item_1, values));
        // iv.setAdapter(new
        // ArrayAdapter(this,android.R.layout.simple_list_item_1, values));
        img = (ImageView) findViewById(R.id.imageView1);

    }

    public void onClick(View v) {
        // select a file
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent, "Select Picture"),
                SELECT_PICTURE);

    }

    String path = "";


    // UPDATED
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == SELECT_PICTURE) {
                Uri selectedImageUri = data.getData();

                // OI FILE Manager
                filemanagerstring = selectedImageUri.getPath();

                // MEDIA GALLERY
                selectedImagePath = getPath(selectedImageUri);

                img.setImageURI(selectedImageUri);

                imagePath.getBytes();
                path = imagePath.toString();
                // TextView txt = (TextView)findViewById(R.id.title);
                // txt.setText(imagePath.toString());

                Bitmap bm = BitmapFactory.decodeFile(imagePath);

                uploadFile(imagePath.toString());

            }

        }

    }

    public int uploadFile(String sourceFileUri) {
        String upLoadServerUri = "http://"+common.ipaddress+"/database/upload.php";
        String fileName = sourceFileUri;
        int serverResponseCode = 0;
        HttpURLConnection conn = null;
        DataOutputStream dos = null;
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;
        File sourceFile = new File(sourceFileUri);
        if (!sourceFile.isFile()) {
            Log.e("uploadFile", "Source File Does not exist");
            return 0;
        }
        try { // open a URL connection to the Servlet
            FileInputStream fileInputStream = new FileInputStream(sourceFile);
            URL url = new URL(upLoadServerUri);
            conn = (HttpURLConnection) url.openConnection(); // Open a HTTP
                                                                // connection to
                                                                // the URL
            conn.setDoInput(true); // Allow Inputs
            conn.setDoOutput(true); // Allow Outputs
            conn.setUseCaches(false); // Don't use a Cached Copy
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("ENCTYPE", "multipart/form-data");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            conn.setRequestProperty("uploaded_file", fileName);
            dos = new DataOutputStream(conn.getOutputStream());

            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"uploaded_file\";filename=\""
                    + fileName + "\"" + lineEnd);
            dos.writeBytes(lineEnd);

            bytesAvailable = fileInputStream.available(); // create a buffer of
                                                            // maximum size

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

            // read file and write it into form...
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

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

            // send multipart form data necesssary after file data...
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

            // Responses from the server (code and message)
            serverResponseCode = conn.getResponseCode();
            String serverResponseMessage = conn.getResponseMessage();

            Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage
                    + ": " + serverResponseCode);
            if (serverResponseCode == 200) {
                runOnUiThread(new Runnable() {
                    public void run() {
                        // tv.setText("File Upload Completed.");
                        Toast.makeText(PhotosActivity.this,
                                "File Upload Complete.", Toast.LENGTH_SHORT)
                                .show();
                    }
                });
            }

            // close the streams //
            fileInputStream.close();
            dos.flush();
            dos.close();

        } catch (MalformedURLException ex) {
            Toast.makeText(PhotosActivity.this, "MalformedURLException",
                    Toast.LENGTH_SHORT).show();
            Log.e("Upload file to server", "error: " + ex.getMessage(), ex);
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(PhotosActivity.this,
                    "Exception : " + e.getMessage(), Toast.LENGTH_SHORT).show();
            Log.e("Upload file to server Exception",
                    "Exception : " + e.getMessage(), e);
        }
        return serverResponseCode;
    }

    // UPDATED!
    public String getPath(Uri uri) {
        String[] projection = { MediaColumns.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
        cursor.moveToFirst();
        imagePath = cursor.getString(column_index);

        return cursor.getString(column_index);
    }
}
$target_path1 = "upload/";

$target_path1 = $target_path1 . basename( $_FILES['uploaded_file']['name']);
move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $target_path1)
public class AddPost extends ActionBarActivity {
protected ImageButton imgButton;// To refer image button
protected ImageView image;

// To refer image view
protected ImageButton ImageFromCard;
private static int RESULT_LOAD_IMAGE = 2;

private ProgressDialog PDialog;
Button btnLogout;
@SuppressWarnings("unused")
private boolean imgCapFlag = false;
protected boolean taken;
protected static final String PHOTO_TAKEN = "photo_taken";
protected String path;
private Bitmap bitmap;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_add_post);

    image = (ImageView) findViewById(R.id.image);

    imgButton = (ImageButton) findViewById(R.id.imageButton1);
    imgButton.setOnClickListener(new ButtonClickHandler());
    ImageFromCard = (ImageButton) findViewById(R.id.imageButton2);

    path = Environment.getExternalStorageDirectory()
            + "/images/make_machine_example.jpg";

    // ---------------------MEMORY CARD OPEN----------------------------

    ImageFromCard.setOnClickListener(new View.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);
        }
    });

    // ------------------URL FOR CATEGORIES--------------------

}

public void seepost(View view) {
    Intent i = new Intent(view.getContext(), MainActivity.class);
    startActivity(i);
}

// ---------Handling Image Result---------------------

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RESULT_LOAD_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();

        BitmapFactory.Options options = new BitmapFactory.Options();
        bitmap = BitmapFactory.decodeFile(picturePath);
        // Set ImageView with the bitmap read in the prev line
        image.setImageBitmap(bitmap);

    } else {

        // Log message
        Log.i("SonaSys", "resultCode: " + resultCode);
        switch (resultCode) {
        // When user doesn't capture image, resultcode returns 0
        case 0:
            Log.i("SonaSys", "User cancelled");
            break;
        // When user captures image, onPhotoTaken an user-defined method to
        // assign the capture image to ImageView
        case -1:
            onPhotoTaken();
            break;

        }

    }

}

// ----------------------------------------------------

public class ButtonClickHandler implements View.OnClickListener {
    public void onClick(View view) {
        // Below log message will be logged when you click Take photo button
        Log.i("SonaSys", "ButtonClickHandler.onClick()");
        // Call startCameraActivity, an user defined method, going to be
        // created
        startCameraActivity();
    }
}

protected void startCameraActivity() {
    // Log message
    Log.i("SonaSys", "startCameraActivity()");
    // Create new file with name mentioned in the path variable
    File file = new File(path);

    Uri outputFileUri = Uri.fromFile(file);
    Intent intent = new Intent(
            android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

    intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

    startActivityForResult(intent, 0);
}

protected void onPhotoTaken() {
    // Log message
    Log.i("SonaSys", "onPhotoTaken");
    // Flag used by Activity life cycle methods
    taken = true;
    // Flag used to check whether image captured or not
    imgCapFlag = true;
    // BitmapFactory- Create an object
    BitmapFactory.Options options = new BitmapFactory.Options();
    // Set image size
    options.inSampleSize = 4;
    // Read bitmap from the path where captured image is stored
    bitmap = BitmapFactory.decodeFile(path, options);
    // Set ImageView with the bitmap read in the prev line
    image.setImageBitmap(bitmap);

}

// ----------------Image Upload ------------------------------

public void postData(View view) {
    // Create a new HttpClient and Post Header
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(
            "http://sitename.net/controllername/post");

    try {

        if (bitmap != null) {

            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            bitmap.compress(CompressFormat.JPEG, 100, bos);
            byte[] data = bos.toByteArray();
            String file = Base64.encodeBytes(data);

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(
                    7);

            nameValuePairs.add(new BasicNameValuePair("image", file));

            httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            httpclient.execute(httppost);

        }

    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
    } catch (IOException e) {
        // TODO Auto-generated catch block
    }
}
 # handling in Asp.Net MVC #

 public string Post( string PostText, byte[] image)
      {
        PostCS PostCs = new PostCS();
        ImageResize obj = new ImageResize();
        string FileName = DateTime.Now.ToFileTime().ToString().Trim();
        string imgName;        

        if (image != null)
        {
            ImageFormat png = ImageFormat.Png;
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream(image))
            {
                System.Drawing.Image bp = System.Drawing.Image.FromStream(ms, true);
                //Bitmap bp = new Bitmap(Image.FromStream(ms));
                imgName = FileName + "_" + bp.Width + "X" + bp.Height + ".png";
                bp.Save(Server.MapPath(ConfigurationManager.AppSettings["WallPostImages"].ToString()) + imgName, png);
                PostCs.ImageName = imgName;                   
                PostCs.InsertPostImg(PostCs);


            }
            var resizemaster = from a in LQdb.Z_ImageSetups select a;
            int wallwidth = 640;
            int wallheight = 480;             

            string orginalfilename = Server.MapPath(ConfigurationManager.AppSettings["WallPostImages"].ToString()) + imgName;
            obj.ImageStream(FileName, ConfigurationManager.AppSettings["WallPostImages"].ToString(), wallwidth, wallheight, orginalfilename, out imgName);
            PostCs.ImageName = imgName;
            PostCs.ImageType = "Wall";
            PostCs.InsertPostImg(PostCs);


        }
        return PostText;
    }