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