Мы пробовали этот код для Android и PHP. Пожалуйста, смотрите ниже код.
Android
Scn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
// Open default camera
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
// start the image capture Intent
startActivityForResult(intent, 100);
}
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 100 && resultCode == RESULT_OK) {selectedImage = intent.getData();
imageBitmap = (Bitmap) intent.getExtras().get("data");
ByteArrayOutputStream baos = new ByteArrayOutputStream();
imageBitmap.compress(Bitmap.CompressFormat.JPEG, 40, baos);
imageView1.setImageBitmap(imageBitmap);
byte[] imageBytes = baos.toByteArray();
String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
submitData(encodedImage);
}
}
public void submitData(final String encodedImage) {
try {
new Thread(new Runnable() {
@Override
public void run() {
try {
//Looper.prepare();
Log.d("looper", "-->>>>");
try
{
isAuthorized = isAuthenticated(encodedImage);
}
catch (Exception e)
{
Log.e("Exception ==> ", e.toString());
}
MHandler.post(new Runnable() {
@Override
public void run() {
try {
if(isAuthorized){
if(AuthenticationResultJSONObject!=null){
String message = AuthenticationResultJSONObject.getString("message");
if(AuthenticationResultJSONObject.getString("status").equalsIgnoreCase("1"))
{
Toast.makeText(ScannerActivity.this,message,Toast.LENGTH_SHORT).show();
}
else if (AuthenticationResultJSONObject.getString("status").equalsIgnoreCase("0"))
{
Toast.makeText(ScannerActivity.this,message,Toast.LENGTH_SHORT).show();
}
}
}
else
{
Toast.makeText(ScannerActivity.this, "Loing unsuccessfull, please try again !", Toast.LENGTH_SHORT).show();
}
}
catch (Exception e)
{
e.printStackTrace();
Log.e("Exception 146==> ", e.toString());
}
finally
{
//progressdialog.dismiss();
//progress.dismissProgressDialog();
}
}
});
} catch (Exception e) {
Log.e("Exception 153==> ", e.toString());
}
}
}).start();
} catch (Exception e) {
Log.e("Exception 159==> ", e.toString());
}
}
public boolean isAuthenticated(final String encodedImage)
{
isAuthorized = false;
String encoder1 = "";
final String url="http://bestpeopleservice.com/projects/scanner/api/api/api.php?class=login&method=login_data&json=";String finalurl = "{\"data\":{\"qr_code\":\""+username1+"\",\"user_pass\":\""+password1+"\",\"longitude\":\""+longitude1+"\",\"latitude\":\""+latitude1+"\",\"adderss\":\""+adderss1+"\",\"images\":\""+encodedImage+"\"}}";//
Log.v("267 1111111", "done url -> "+url+finalurl);
try {
encoder1 = URLEncoder
.encode(finalurl,"UTF-8");
Log.v("267 222", "done url 2 -> "+url+encoder1);
}
catch (UnsupportedEncodingException e1)
{
e1.printStackTrace();
}
try {
if (isNetworkConnected()) {
AuthenticationResultJSONObject = new JSONObject(doFetchDataFromWebService_Simple_OnlyJSONResponse(url+encoder1));
Log.v("Online", "User json array === "+AuthenticationResultJSONObject);
}else{
Toast.makeText(ScannerActivity.this, "Please check your internet connection and try again.", Toast.LENGTH_SHORT).show();
}
}
catch(Exception e){
e.getMessage();
}
finally{
if(AuthenticationResultJSONObject!=null){
isAuthorized = true;
}
else
{
isAuthorized=false;
}
}
// }
// });
return isAuthorized;
}
// Checking the internet connection
public boolean isNetworkConnected() {
ConnectivityManager connectivitymanagar = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkinfo = connectivitymanagar.getActiveNetworkInfo();
if (networkinfo == null || !networkinfo.isConnectedOrConnecting()) {
return false;
} else {
return true;
}
}public String doFetchDataFromWebService_Simple_OnlyJSONResponse(
String WebServiceURL) {
String responseBody = "";
JSONObject jobj = new JSONObject();
try {
HttpGet WSHttpPost = null;
HttpClient WSHttpClient = null;
HttpResponse WSHttpResponse = null;
WSHttpClient = getNewHttpClient();
WSHttpPost = new HttpGet(WebServiceURL);
WSHttpResponse = WSHttpClient.execute(WSHttpPost);
Log.d("resp", ""+WSHttpResponse);
//responseBody = EntityUtils.toString(WSHttpResponse.getEntity());
responseBody = EntityUtils.toString(WSHttpResponse.getEntity(), "UTF-8");Log.v("response1", "" + responseBody);
} catch (Exception e) {
Log.e("Exception2 ==> ", e.toString());
}
if (responseBody == null || responseBody.equalsIgnoreCase("null")) {
return "";
} else {
return responseBody;
}
}
public HttpClient getNewHttpClient() {
try {
KeyStore trustStore = KeyStore.getInstance(KeyStore
.getDefaultType());
trustStore.load(null, null);
SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
HttpParams params = new BasicHttpParams();
HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", PlainSocketFactory
.getSocketFactory(), 80));
registry.register(new Scheme("https", sf, 443));
ClientConnectionManager ccm = new ThreadSafeClientConnManager(
params, registry);
return new DefaultHttpClient(ccm, params);
} catch (Exception e) {
return new DefaultHttpClient();
}
}
public class MySSLSocketFactory extends SSLSocketFactory {
SSLContext sslContext = SSLContext.getInstance("TLS");
public MySSLSocketFactory(KeyStore truststore)
throws NoSuchAlgorithmException, KeyManagementException,
KeyStoreException, UnrecoverableKeyException {
super(truststore);
TrustManager tm = new X509TrustManager() {
public void checkClientTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain,
String authType) throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return null;
}
};
sslContext.init(null, new TrustManager[] { tm }, null);
}
@Override
public Socket createSocket(Socket socket, String host, int port,
boolean autoClose) throws IOException, UnknownHostException {
return sslContext.getSocketFactory().createSocket(socket, host,
port, autoClose);
}
@Override
public Socket createSocket() throws IOException {
return sslContext.getSocketFactory().createSocket();
}
}
Возвращает синтаксический анализ bytestring. Его ценность слишком велика.
PHP
$base=$Data['images'];
$binary=base64_decode($base);
header('Content-Type: bitmaps; charset=utf-8');
header("Content-Length: " . mb_strlen($base, '8bit'));
$file = fopen('qr_code.jpeg', 'wb');
fwrite($file, $binary);
fclose($file);
echo 'Image upload complete!!, Please check your php file directory';
Над кодом работает. Но это имеет некоторые проблемы. Изображение успешно сохранено в папке, но изображение будет отображаться как поврежденное. Как мы можем решить эту проблему.
Заранее спасибо.
Пожалуйста, попробуйте этот код, этот код работает для меня.
<?php
// Path to move uploaded files
$target_path = "uploads/";
// array for final json respone
$response = array();
// getting server ip address
$server_ip = gethostbyname(gethostname());
// final file url that is being uploaded
$file_upload_url = 'http://' . $server_ip . '/' . '/xyz/' . '/' . $target_path;if (isset($_FILES['image']['name'])) {
$target_path = $target_path . basename($_FILES['image']['name']);
// reading other post parameters
$email = isset($_POST['email']) ? $_POST['email'] : '';
$website = isset($_POST['website']) ? $_POST['website'] : '';
$response['file_name'] = basename($_FILES['image']['name']);
$response['email'] = $email;
$response['website'] = $website;
try {
// Throws exception incase file is not being moved
if (!move_uploaded_file($_FILES['image']['tmp_name'], $target_path)) {
// make error flag true
$response['error'] = true;
$response['message'] = 'Could not move the file!';
}
// File successfully uploaded
$response['message'] = 'File uploaded successfully!';
$response['error'] = false;
$response['file_path'] = $file_upload_url . basename($_FILES['image']['name']);
} catch (Exception $e) {
// Exception occurred. Make error flag true
$response['error'] = true;
$response['message'] = $e->getMessage();
}
} else {
// File parameter is missing
$response['error'] = true;
$response['message'] = 'Not received any file!F';
}
// Echo final json response to client
echo json_encode($response);
?>
Я не Android-разработчик.
Но я знаю, что проблема с твоей просьбой. Вы передаете все данные в GET
метод запроса (добавление параметров в URL). Но он имеет ограничение в 2 083 символов. (Это зависит от веб-сервера на самом деле)
Таким образом, если размер вашего изображения больше этого, он будет просто обрезан по URL.
Для решения, вы должны использовать POST
запрос на отправку данных в веб-сервис.
Android
См ответ этот вопрос для фрагмента кода Android
Код PHP
<?php
$json=json_decode($_POST['json']); //decoding json which is received from Android.
$photo=$json->images; //get image data (which is encoded in base64)
/* Decoding image */
$binary = base64_decode ( $photo );
/* Opening image */
$file = fopen ( 'file_name_to_create.jpeg', 'wb' );
/* Writing to server */
fwrite ( $file, $binary );
/* Closing image file */
fclose ( $file );
?>
Это создаст file_name_to_create.jpeg
в текущем каталоге.
Ссылка
Привет, я использовал этот подход, чтобы сохранить myImage.
Создайте папку изображений внутри вашего корня.
$ allowExts = array («gif», «jpeg», «jpg», «png»);
$ temp = explode («.», $ _FILES [«file»] [«name»]);
$ extension = end ($ temp);
move_uploaded_file ($ _ FILES [«file»] [«tmp_name»], «../images/». $ varFileName);
Используйте этот URL, чтобы загрузить мой код для отправки файла изображения на сервер php.
final Dictionary<String, String> dictionary = new Hashtable<String, String>();
dictionary.put("name", "kruti");
dictionary.put("file", "file");