Upload Images to Server
package com.example.imageupload;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import androidx.annotation.Nullable;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream;
public class MainActivity extends AppCompatActivity {
private Context context;
static final int REQUEST_IMAGE_CAPTURE = 1;
static final String TAG = "MainActivity";
private ImageView imageView;
BitmapDrawable drawable = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
Button capture = findViewById(R.id.take_image_from_camera);
imageView = findViewById(R.id.image_from_camera);
Logger.addLogAdapter(new AndroidLogAdapter());
capture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d(TAG,"in Click");
Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, REQUEST_IMAGE_CAPTURE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE) {
if (resultCode == RESULT_OK) {
assert data != null;
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
imageView.setImageBitmap(imageBitmap);
drawable = (BitmapDrawable) imageView.getDrawable();
final Bitmap bitmap = drawable.getBitmap();
uploadToServer(encodeToBase64(bitmap,Bitmap.CompressFormat.PNG,100));
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "You cancelled the operation", Toast.LENGTH_SHORT).show();
}
}
}
public static String encodeToBase64(Bitmap image, Bitmap.CompressFormat compressFormat, int quality) {
ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
image.compress(compressFormat, quality, byteArrayOS);
return Base64.encodeToString(byteArrayOS.toByteArray(), Base64.DEFAULT);
}
private void uploadToServer(final String image) {
RequestQueue queue = Volley.newRequestQueue(context);
JSONObject json = new JSONObject();
try {
json.put("store", "amz");
json.put("image", image);
} catch (JSONException e) {
e.printStackTrace();
}
String url = "http://10.1.121.45:5000/image";
JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.POST, url, json,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d("Hello", "Response: " + response.toString());
Logger.d("hello");
Logger.json(String.valueOf(response));
Logger.e("error");
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("Hello", error.getMessage());
}
});
queue.add(jsonObjectRequest);
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.imageupload">
<uses-permission android:name="android.permission.INTERNET" />
<uses-feature android:name="android.hardware.camera"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:networkSecurityConfig="@xml/network_security_config"
android:theme="@style/Theme.ImageUpload">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
</trust-anchors>
</base-config>
</network-security-config>
import json
from matplotlib import collections
from app import app
from pymongo import MongoClient
from flask import request
from flask.json import jsonify
import sys
import base64
from datetime import datetime
client = MongoClient('mongodb+srv://mina:mina@cluster0.g4yji.mongodb.net/myFirstDatabase?retryWrites=true&w=majority')
db = client["myFirstDatabase"]
# A welcome message to test our server
@app.route('/')
def index():
return "<h1>Welcome to our server 123 !!</h1>"
# Add user
@app.route('/add', methods=['POST'])
def add():
collection = db["customers"]
request_data = request.get_json()
name = request_data['name']
address = request_data['address']
data = { "name": name, "address": address }
_id = collection.insert_one(data)
return json.dumps({'id' : str(_id.inserted_id)})
# Select All users
@app.route('/all', methods=['POST'])
def all():
collection = db["customers"]
customers = list(collection.find())
# we need to convert _id to str.
return json.dumps(customers, default=str)
@app.route("/image", methods=["GET", "POST"])
def fun():
print(request.is_json)
content = request.get_json()
print(content['store'])
image = content['image']
image_name = datetime.now().strftime("%Y_%m_%d-%I_%M_%S_%p") + ".png"
with open(image_name, "wb") as fh:
fh.write(base64.decodebytes(image.encode()))
data = {'a': 1, 'b': 2}
return jsonify(data)
if __name__ == "__main__":
app.run(host='10.1.121.45', port=5000)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:gravity="center_horizontal"
android:layout_margin="16dp"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/instruction"/>
<Button
android:id="@+id/take_image_from_camera"
android:layout_width="wrap_content"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
android:text="Take Photo"/>
<ImageView
android:id="@+id/image_from_camera"
android:layout_width="match_parent"
android:layout_height="450dp"
android:layout_marginTop="16dp"
android:src="@drawable/ic_launcher_background" />
</LinearLayout>
Last updated
Was this helpful?