gpt4 book ai didi

Android 附件/文件选择器到 InputStream 字符串

转载 作者:行者123 更新时间:2023-11-29 23:21:06 25 4
gpt4 key购买 nike

我想创建一个类似于下图的函数。允许用户从设备中选择图像/pdf 文件并将文件转换为字符串形式的输入流并发送到服务器。
我经历过这个Attaching a file of any type in Android application?并成功调用文件但没有相机选项。感谢是否有任何我可以引用的来源或能够执行此操作的图书馆:

  • 提供从图库中选择/拍摄新照片/文档的选项
  • 选择文件并转换到字符串(输入流)

    enter image description here

    //Json that server going to receive
    "Attachment": {
    "InputStream": "string",
    "FileName": "string"
    }


    /*My Code*/
    public void goToAttachment(){
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
    intent.setType("image/*|application/pdf");
    startActivityForResult(Intent.createChooser(intent, null), SELECTFILE_RESULT_CODE);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){
    switch (requestCode){
    case SELECTFILE_RESULT_CODE:
    if(resultCode == RESULT_OK){
    fileSrc = data.getData().getPath();

    }
    break;
    }
    }
  • 最佳答案

    您可以使用下面的代码首先获取 Image 的 Bitmap,然后从 Bitmap 对象获取 String:

    @Override
    public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data){
    switch (requestCode){
    case SELECTFILE_RESULT_CODE:
    if(resultCode == RESULT_OK){
    // Let's read picked image data - its URI
    Uri pickedImage = data.getData();
    // Let's read picked image path using content resolver
    String[] filePath = { MediaStore.Images.Media.DATA };
    Cursor cursor = getContentResolver().query(pickedImage, filePath, null, null, null);
    cursor.moveToFirst();
    String imagePath = cursor.getString(cursor.getColumnIndex(filePath[0]));
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
    Bitmap bitmap = BitmapFactory.decodeFile(imagePath, options);
    String bmpString= bitMapToString(bitmap)
    cursor.close();
    }
    break;
    }
    }

    您可以使用以下方法将Bitmap 转换为String:

    public String bitMapToString(Bitmap bitmap){
    ByteArrayOutputStream baos=new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.PNG,100, baos);
    byte [] b=baos.toByteArray();
    String temp=Base64.encodeToString(b, Base64.DEFAULT);
    return temp;
    }

    您可以更改位图压缩格式JPGPNG作为您的图像。

    对于 PDF 和其他文件,您可以使用以下方法将其转换为字符串。

    private String getString(String filepath) throws IOException {
    InputStream inputStream = new FileInputStream(filepath);
    byte[] byteArray = IOUtils.toByteArray(inputStream);
    String encoded = Base64.encodeToString(byteArray, Base64.DEFAULT);
    return encoded;
    }

    要获取文件路径,您可以使用以下代码:

    public String getRealPathFromURI(Context context, Uri contentUri) {
    Cursor cursor = null;
    try {
    String[] proj = { MediaStore.Images.Media.DATA };
    cursor = context.getContentResolver().query(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
    } finally {
    if (cursor != null) {
    cursor.close();
    }
    }
    }

    关于Android 附件/文件选择器到 InputStream 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54301216/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com