Android-вложение / средство выбора файлов в строку InputStream - PullRequest
0 голосов
/ 22 января 2019

Я хочу создать функцию, аналогичную изображению ниже.Разрешить пользователю выбирать изображение / PDF-файл с устройства и преобразовывать файл в виде входного потока в виде строки и отправлять на сервер.
Я прошел через это Прикрепить файл любого типа в приложении Android? и успешно вызвать документ, но у него нет опции для камеры.Оцените, есть ли какой-либо источник, на который я могу ссылаться, или библиотека, которая может выполнить это:

предоставляет возможность выбрать из галереи / сделать новую фотографию / документ Выбрать файл и преобразовать в строку (inputtream)

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;
    }
}

1 Ответ

0 голосов
/ 22 января 2019

Вы можете использовать приведенный ниже код, чтобы получить сначала Bitmap изображения, а затем получить String из Bitmap Объект:

@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;
}

Вы можете изменить Bitmap Сжать формат JPG или PNG в соответствии с вашим изображением.

Для 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();
    }
  }
}
...