java - Android Base64 图片上传进度
问题描述
我有AsynscTask
它可以帮助我将图像上传到服务器,它可以完美地工作,没有任何问题,但现在我想显示上传百分比和上传给用户的总大小。对于图像上传,我使用Base64
的是在上传之前转换为字符串并显示百分比的图像,这对我来说是一个问题,我用谷歌搜索但无法找到 Base64 图像上传百分比的解决方案。
这是我的异步任务
private class uploadImage extends AsyncTask<Void,Void,String> {
private static final String uploadImage_URL="https://192.168.1.10/Android/upload.php";
BufferedReader reader;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onProgressUpdate(Void... values) {
super.onProgressUpdate(values);
}
@Override
protected String doInBackground(Void... voids) {
Bitmap base64Bitmap = BitmapFactory.decodeFile(finalPath);
String Base64Image = App_Functions.Convert_To_Base64(base64Bitmap);
int length = Base64Image.length();
try {
String data = URLEncoder.encode("userId", "UTF-8") + "=" + URLEncoder.encode(Session.getUserID(), "UTF-8");
data += "&" + URLEncoder.encode("ImageBase64", "UTF-8") + "=" + URLEncoder.encode(Base64Image, "UTF-8");
//data += "&" + URLEncoder.encode("type", "UTF-8") + "=" + URLEncoder.encode("coverphoto", "UTF-8");
URL url=new URL(uploadImage_URL);
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setConnectTimeout(10000);
connection.connect();
int imagePayload = Base64.decode(Base64Image,Base64.NO_WRAP).length;
Log.d(TAG,"Image Pay Load "+imagePayload/1024);
OutputStream outputStream = connection.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream, "UTF-8"));
writer.write(data);
writer.flush();
writer.close();
outputStream.close();
Log.d(TAG, "Response Code " + connection.getResponseCode());
if (connection.getResponseCode() == 200) {
InputStream inputStream = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
StringBuilder stringBuffer = new StringBuilder();
while ((line = reader.readLine()) != null) {
stringBuffer.append(line);
Log.d(TAG, "Appending JSON into String Buffer");
}
Log.d(TAG, "JSON Received " + stringBuffer);
JSONObject jsonObject = new JSONObject(stringBuffer.toString());
String serverResponse = jsonObject.getString("userImageUpload");
String pathOfImage,pathOfCover;
if (serverResponse.equals("Image Uploaded")){
return "Success";
}else {
return "Fail";
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e1) {
e1.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
if (result!=null){
if (result.equals("Success")){
//progressBar.dismiss();
}else {
Toast.makeText(MyApplication.getmContext(), "Fail to upload image. Please try again.", Toast.LENGTH_SHORT).show();
//progressBar.setProgress(0);
//progressBar.setMessage("Image Upload Failed");
//progressBar.setCancelable(true);
}
}
/*DialogFragment interest=new Interest_Grid();
interest.show(getFragmentManager(),"UploadImage"); */
}
解决方案
推荐阅读
- c# - Newtonsoft.Json 字符串到 JSON 的转换问题
- node.js - Azure 函数忽略 https.request
- bash - Azure Pipelines Shell 脚本任务未执行
- javascript - 如何限制来自firestore的浏览器缓存中的离线数据
- python - 滚动 OLS 回归和 ValueError:值的长度与索引的长度不匹配
- spring - 如何使用 ReadBodyPredicateFactory 缓存有效负载数据
- c# - 如何从数据集表创建文本框 autoCompleteSource?
- angularjs - $watch 不为嵌入指令触发
- javascript - 如何从此中间件访问请求正文?
- python - 如何删除在 Python 列表中创建的空值?