web-dev-qa-db-fra.com

Comment convertir l'URI en données inputStream et télécharger les données de flux sur le serveur?

Je travaille la tâche en sélectionnant le fichier dans la galerie et en téléchargeant le fichier sélectionné sur le serveur.

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   super.onActivityResult(requestCode, resultCode, data);
   if (resultCode == Activity.RESULT_OK) {
       if (requestCode == PICK_FILE_REQUEST) {
           if (data != null) {
               //no data present
               Uri uri = data.getData();
              String filePath = data.getData().getPath();
        //       String path = uri.getPath();
               file = new File(filePath);

               String name = getContentName(getContentResolver(), uri);
               try {
                   InputStream inStream = getContentResolver().openInputStream(uri);

               } catch (FileNotFoundException e) {
                   e.printStackTrace();
               }
               try {
                   bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

               } catch (IOException e) {
                   e.printStackTrace();
               }

               LinearLayout linearLayout = new LinearLayout(this);
               linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                       LinearLayout.LayoutParams.WRAP_CONTENT));
               linearLayout.setOrientation(LinearLayout.VERTICAL);

               ImageView imageView = new ImageView(this);
               imageView.setImageBitmap(bitmap);
               attachFile.addView(imageView);


               TextView textView = new TextView(this);
               textView.setText(name);
               attachFile.addView(textView);

               return;
           }

       }
   }

J'ai poché le fichier en utilisant l'intention

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
       intent.setType("*/*");
       intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
       //intent.addFlags(ST)
       startActivityForResult(Intent.createChooser(intent, "Choose File to Upload.."), PICK_FILE_REQUEST);

Mon problème est que les données uri sont converties en inputStream mais j'utilise la bibliothèque d'ions car les fichiers d'entrée ne peuvent pas être téléchargés sur le serveur. Comment convertir le flux d'entrée en flux de sortie pour enregistrer dans getCacheDir (). J'ai référencé ce site Comment obtenir le chemin d'accès aux fichiers sélectionnés depuis le stockage externe dans Android?

Veuillez m'aider à télécharger les données InputStream dans la bibliothèque d'ions.

10
Prabha Karan

Dans le code ci-dessous, j'ai passé l'uri dans le flux d'entrée, puis créé le fichier et les données inputStream sont écrites dans le flux de sortie. Cela fonctionne à 100%, essayez cette méthode.

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == Activity.RESULT_OK) {
            if (requestCode == PICK_FILE_REQUEST) if (data != null) {
                //no data present
                Uri uri = data.getData();
                String filePath = data.getData().getPath();

                String name = getContentName(getContentResolver(), uri);
             File   file = new File(getCacheDir(),name);

                int maxBufferSize = 1 * 1024 * 1024;

                try {
                  InputStream  inputStream = getContentResolver().openInputStream(uri);
                    Log.e("InputStream Size","Size " + inputStream);
                  int  bytesAvailable = inputStream.available();
//                    int bufferSize = 1024;
                   int bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    final byte[] buffers = new byte[bufferSize];

                    FileOutputStream outputStream = new FileOutputStream(file);
                    int read = 0;
                    while ((read = inputStream.read(buffers)) != -1) {
                        outputStream.write(buffers, 0, read);
                    }
                    Log.e("File Size","Size " + file.length());
                    inputStream.close();
                    outputStream.close();

                    file.getPath();
                    Log.e("File Path","Path " + file.getPath());
                    file.length();
                    Log.e("File Size","Size " + file.length());

                    if(file.length() > 0){
                        attachementImage.setVisibility(View.INVISIBLE);
                    }


                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    bitmap = MediaStore.Images.Media.getBitmap(this.getContentResolver(), uri);

                } catch (IOException e) {
                    e.printStackTrace();
               }
                imageView.setImageBitmap(bitmap);
                attachFile.addView(imageView);

                attachFile.addView(textView);

                return;
            }
        }
}
7
Prabha Karan