我是android的新手。从最近几天起,我遇到了将图像发送到服务器的问题。我只是有一个表格,包括一些文本字段和图像从库中取出。除了图像上传外,一切都很完美。我在google上尝试了大部分教程。主要问题是logcat没有显示任何错误。我无法跟踪什么实际上出了问题。 这就是我所做的
我使用此代码从galary中获取Image
private void showFileChooser() {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
}
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
filePath = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
schoolLogoUpload.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
}
}
我写了这个函数来将所选图像发送到服务器
public String getPath(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
String document_id = cursor.getString(0);
document_id = document_id.substring(document_id.lastIndexOf(":") + 1);
cursor.close();
cursor = getContentResolver().query(
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
null, MediaStore.Images.Media._ID + " = ? ", new String[]{document_id}, null);
cursor.moveToFirst();
String path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
cursor.close();
return path;
}
public void uploadMultipart() {
//getting the actual path of the image
String path = getPath(filePath);
//Uploading code
try {
String uploadId = UUID.randomUUID().toString();
//Creating a multi part request
new MultipartUploadRequest(this, uploadId, UPLOAD_URL)
.addFileToUpload(path, "image") //Adding file
.setNotificationConfig(new UploadNotificationConfig())
.setMaxRetries(2)
.startUpload(); //Starting the upload
} catch (Exception exc) {
Toast.makeText(this, exc.getMessage(), Toast.LENGTH_SHORT).show();
}
}
这是我在服务器端接收图像数据的代码
if(Input::hasFile('image')) {
$file = Input::file('image');
$destination_path = "uploads";
$extension = Input::file('image')->getClientOriginalExtension();
$file_name = str_random(20). "." . $extension;
Input::file('image')->move($destination_path, $file_name);
}else{
return \Response::json([
"error"=>["message"=>"Please select the college logo"]
], 404);
答案 0 :(得分:1)
我假设您已将图片转换为Base64
格式。基本上Base64
格式将图像(或编码图像)转换为String
格式。
*撰写Asynctask
,将图片上传到服务器*
以下是Asynctask
: -
private class AsyncUploadToServer extends AsyncTask<String, Void, String>
{
ProgressDialog pdUpload;
String imageData = "";
@Override
protected void onPreExecute() {
super.onPreExecute();
pdUpload = new ProgressDialog(MainActivity.this);
pdUpload.setMessage("Uploading...");
pdUpload.show();
}
@Override
protected String doInBackground(String... params)
{
imageData = params[0];
HttpClient httpclient = new DefaultHttpClient();
// URL where data to be uploaded
HttpPost httppost = new HttpPost(YOUR_URL_HERE);
try
{
// adding data
List<NameValuePair> dataToBeAdd = new ArrayList<>();
dataToBeAdd.add(new BasicNameValuePair("uploadedImage", imageData));
httppost.setEntity(new UrlEncodedFormEntity(dataToBeAdd));
// execute http post request
HttpResponse response = httpclient.execute(httppost);
Log.i("MainActivity", "Response: " + response);
}
catch (ClientProtocolException ex)
{
ex.printStackTrace();
}
catch (IOException ioe)
{
ioe.printStackTrace();
}
return "";
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
pdUpload.dismiss();
Toast.makeText(getApplicationContext(), "Image Uploaded Successfully..!!", Toast.LENGTH_SHORT).show();
}
}
希望这会对你有所帮助。 : - )
P.S。: - 如果你不太了解asynctask,那么链接https://developer.android.com/reference/android/os/AsyncTask.html