php - Android 上传多张带有文本数据的图像

标签 php android mysql

下面的代码将多个图像上传到服务器,并根据需要将它们的路径和一个名称写入 mysql 数据库。我希望能够为每个图像写入用户输入的图像名称。在可能的情况下,其他用户也将数据输入到数据库中。请帮忙。附件是 xml 的快照。

enter image description here

public class MainActivity extends AppCompatActivity {

    Bitmap bitmap;
    Bitmap bitmap1;
    boolean check = true;
    Button SelectImageGallery;
    Button SelectImageGallery1;
    Button  UploadImageServer;
    ImageView imageView;
    ImageView imageView1;
    EditText imageName;
    ProgressDialog progressDialog ;
    String GetImageNameEditText;
    String ImageName = "image_name";
    String ImagePath = "image_path";
    String ImagePath1 = "image_path1";

    String ServerUploadPath ="http://10.0.3.2/multiple/uploadmultiple.php";

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

        imageView = (ImageView)findViewById(R.id.imageView);
        imageView1 = (ImageView)findViewById(R.id.imageView1);
        imageName = (EditText)findViewById(R.id.editTextImageName);
        SelectImageGallery = (Button)findViewById(R.id.buttonSelect);
        SelectImageGallery1 = (Button)findViewById(R.id.buttonSelect1);
        UploadImageServer = (Button)findViewById(R.id.buttonUpload);

        SelectImageGallery.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Image From Gallery"), 1);

            }
        });

        SelectImageGallery1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent();
                intent.setType("image/*");
                intent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(intent, "Select Image2 From Gallery"), 2);

            }
        });

        UploadImageServer.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                GetImageNameEditText = imageName.getText().toString();
                ImageUploadToServerFunction();
            }
        });
    }

    @Override
    protected void onActivityResult(int RC, int RQC, Intent I) {
        super.onActivityResult(RC, RQC, I);
        if (RC == 1 && RQC == RESULT_OK && I != null && I.getData() != null) {
            Uri uri = I.getData();
            try {
                bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                imageView.setImageBitmap(bitmap);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        if (RC == 2 && RQC == RESULT_OK && I != null && I.getData() != null) {
            Uri uri = I.getData();
            try {
                bitmap1 = MediaStore.Images.Media.getBitmap(getContentResolver(), uri);
                imageView1.setImageBitmap(bitmap1);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    public String getStringImage(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 65, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }

    public String getStringImage1(Bitmap bmp){
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bmp.compress(Bitmap.CompressFormat.JPEG, 65, baos);
        byte[] imageBytes = baos.toByteArray();
        String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        return encodedImage;
    }


    public void ImageUploadToServerFunction(){
        final String imageName = GetImageNameEditText.trim();
        final String imageView = getStringImage(bitmap);
        final String imageView1 = getStringImage1(bitmap1);

        class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
                progressDialog = ProgressDialog.show(MainActivity.this,"Images Are Uploading","Please Wait",false,false);
            }

            @Override
            protected void onPostExecute(String string1) {
                super.onPostExecute(string1);
                // Dismiss the progress dialog after done uploading.
                progressDialog.dismiss();
                // Printing uploading success message coming from server on android app.
                Toast.makeText(MainActivity.this,string1,Toast.LENGTH_LONG).show();
                // Setting image as transparent after done uploading.
            }

            @Override
            protected String doInBackground(Void... params) {
                ImageProcessClass imageProcessClass = new ImageProcessClass();
                HashMap<String,String> HashMapParams = new HashMap<String,String>();
                HashMapParams.put(ImageName, imageName);
                HashMapParams.put(ImagePath, imageView);
                HashMapParams.put(ImagePath1, imageView1);
                String FinalData = imageProcessClass.ImageHttpRequest(ServerUploadPath, HashMapParams);
                return FinalData;
            }
        }
        AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
        AsyncTaskUploadClassOBJ.execute();
    }

    public class ImageProcessClass{
        public String ImageHttpRequest(String requestURL,HashMap<String, String> PData) {
            StringBuilder stringBuilder = new StringBuilder();
            try {
                URL url;
                HttpURLConnection httpURLConnectionObject ;
                OutputStream OutPutStream;
                BufferedWriter bufferedWriterObject ;
                BufferedReader bufferedReaderObject ;
                int RC ;
                url = new URL(requestURL);
                httpURLConnectionObject = (HttpURLConnection) url.openConnection();
                httpURLConnectionObject.setReadTimeout(19000);
                httpURLConnectionObject.setConnectTimeout(19000);
                httpURLConnectionObject.setRequestMethod("POST");
                httpURLConnectionObject.setDoInput(true);
                httpURLConnectionObject.setDoOutput(true);
                OutPutStream = httpURLConnectionObject.getOutputStream();
                bufferedWriterObject = new BufferedWriter(
                        new OutputStreamWriter(OutPutStream, "UTF-8"));
                bufferedWriterObject.write(bufferedWriterDataFN(PData));
                bufferedWriterObject.flush();
                bufferedWriterObject.close();
                OutPutStream.close();
                RC = httpURLConnectionObject.getResponseCode();
                if (RC == HttpsURLConnection.HTTP_OK) {
                    bufferedReaderObject = new BufferedReader(new InputStreamReader(httpURLConnectionObject.getInputStream()));
                    stringBuilder = new StringBuilder();
                    String RC2;
                    while ((RC2 = bufferedReaderObject.readLine()) != null){
                        stringBuilder.append(RC2);
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return stringBuilder.toString();
        }

        private String bufferedWriterDataFN(HashMap<String, String> HashMapParams) throws UnsupportedEncodingException {
            StringBuilder stringBuilderObject;
            stringBuilderObject = new StringBuilder();
            for (Map.Entry<String, String> KEY : HashMapParams.entrySet()) {
                if (check)
                    check = false;
                else
                    stringBuilderObject.append("&");
                stringBuilderObject.append(URLEncoder.encode(KEY.getKey(), "UTF-8"));
                stringBuilderObject.append("=");
                stringBuilderObject.append(URLEncoder.encode(KEY.getValue(), "UTF-8"));
            }

            return stringBuilderObject.toString();
        }

    }
}

PHP 代码

<?php

if($_SERVER['REQUEST_METHOD']=='POST'){

    $image = $_POST['image_path'];
    $image1 = $_POST['image_path1'];
    $name = $_POST['image_name'];
    $name1 = $_POST['image_name1'];

    define('HOST','localhost');
    define('USER','root');
    define('PASS','');
    define('DB','multiple');

    $con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect to Server');

    $path = "uploads1/$name.png";
    $path1 = "uploads1/$name1.png";

    $actualpath = "http://10.0.3.2/$path";
    $actualpath1 = "http://10.0.3.2/$path1";

    $sql = "INSERT INTO multiple2 (image1,name1,image2,name2,time) VALUES ('id','$actualpath','$name','$actualpath1','$name1',now())";

    if(mysqli_query($con,$sql)){
        file_put_contents($path,base64_decode($image));
        file_put_contents($path1,base64_decode($image1));
        echo "Successfully Uploaded";
    }

    mysqli_close($con);

}else{
    echo "Error";
}

最佳答案

我通过在迭代循环中循环所有图像来做到这一点。

关于php - Android 上传多张带有文本数据的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59663046/

相关文章:

Mysql 避免表到表关系

php - mysql 没有在 wmp 中启动

php - BigCommerce API PHP - 授权?

php - ImageMagick 白色到透明背景,同时保持白色对象

php - 按照用户的样式将用户输入插入 mysql 数据库(带换行符)

java - Android - 从 fragment 显示 AlertDialog 时出错

android - 在android中的微调器中设置背景颜色、边框和箭头图标

android - 如何在 webview 中处理回调

python - 我想用python制作gui来显示RDS MySQL DB中的表

mysql - 加入 mysql 存储过程