我正在尝试将 PDF 文件上传到我的服务器。我可以使用位图上传图像解码。我正在重复使用相同的代码,但我需要在我的 Android 应用程序上上传用户的 PDF。
private void chooseFile(int type2) {
//System.out.println(type2);
Intent intent = new Intent();
//intent.setType("application/pdf");
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select Picture"),type2 );
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// System.out.println(data);
if ((requestCode == 1 || requestCode == 2 || requestCode == 3 || requestCode == 4 || requestCode == 5 || requestCode == 6 || requestCode == 7 || requestCode == 8) && resultCode == RESULT_OK && data != null && data.getData() != null) {
Uri filePath = data.getData();
try {
bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
// profile_image.setImageBitmap(bitmap);
} catch (IOException e) {
e.printStackTrace();
}
if (requestCode == 1) {
String userString = getStringImage(bitmap , 1);
RequestQueue requestQueue = Volley.newRequestQueue(CashFlowActivity.this);
String url = C.url+"cashflow_upload.php";
StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
@Override
public void onResponse(String response) {
//System.out.println(response);
// Toast.makeText(getApplicationContext(), response, Toast.LENGTH_SHORT).show();
p1 = "user_file/u_image/"+userID+"/extract.pdf";
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Toast.makeText(getApplicationContext(), "Error while uploading image", Toast.LENGTH_SHORT).show();
}
}){
@Override
protected Map<String, String> getParams() throws AuthFailureError {
Map<String, String> params = new HashMap<>();
params.put("userId", userID);
params.put("extractImage",userString);
return params;
}
};
requestQueue.add(stringRequest);
Run Code Online (Sandbox Code Playgroud)
我没有找到通过与 PHP、MySQL 关联的 Android 应用程序上传 PDF 的直接方法。我在这里和那里做了一些更改,我能够在我的服务器上获取 PDF 文件,但 PDF 本身是空的或包含文件位置的字符串。
public String getStringImage(Bitmap bitmap, int type) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] imageByteArray = byteArrayOutputStream.toByteArray();
String encodeImage = Base64.encodeToString(imageByteArray, Base64.DEFAULT);
imageByteArray = Base64.decode(encodeImage, Base64.DEFAULT);
Bitmap decodeImage = BitmapFactory.decodeByteArray(imageByteArray, 0, imageByteArray.length);
if (type == 1) {
extractPhoto.setImageBitmap(decodeImage);
} else if (type == 2) {
bankPhoto.setImageBitmap(decodeImage);
} else if (type == 3) {
itrPhoto.setImageBitmap(decodeImage);
} else if (type == 4) {
bankPhoto1.setImageBitmap(decodeImage);
} else if (type == 5) {
itrPhoto1.setImageBitmap(decodeImage);
} else if (type == 6) {
bankPhoto2.setImageBitmap(decodeImage);
} else if (type == 7) {
itrPhoto2.setImageBitmap(decodeImage);
} else if (type == 8) {
bankPhoto3.setImageBitmap(decodeImage);
}
return encodeImage;
}
Run Code Online (Sandbox Code Playgroud)
小智 5
您可以使用此功能:
public String getStringPdf (Uri filepath){
InputStream inputStream = null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
try {
inputStream = getContentResolver().openInputStream(filepath);
byte[] buffer = new byte[1024];
byteArrayOutputStream = new ByteArrayOutputStream();
int bytesRead;
while ((bytesRead = inputStream.read(buffer)) != -1) {
byteArrayOutputStream.write(buffer, 0, bytesRead);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
byte[] pdfByteArray = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(pdfByteArray, Base64.DEFAULT);
}
Run Code Online (Sandbox Code Playgroud)
感谢blackapps指导正确的方法。
| 归档时间: |
|
| 查看次数: |
7979 次 |
| 最近记录: |