如何上传PDF文件到服务器

Nee*_*tel 0 pdf android

我正在尝试将 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指导正确的方法。