2017-05-04 162 views
4

我正在从图库中挑选文件并将拾取的文件上传到服务器。如何将uri转换为inputStream数据并将流数据上传到服务器?

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

     } 
    } 

我使用意图

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

我的问题是URI数据转换InputStream的,但我使用该文件的InputStream离子库不能被上传到服务器poicked文件。 如何将inputStream转换为outputstream以保存在getCacheDir()中我引用此网站How to get the file path for the picked files from the external storage in android?

请帮助我如何将InputStream数据上载到离子库中。

+0

使用'的InputStream inStream'阅读,现在你不使用它 – pskink

+0

@ pskink我不知道如何使用InputStream的..如果你知道方法请帮我 –

+0

https://developer.android请参阅'read()'方法(当然这两个方法是'byte [] b''是你应该使用的变体) – pskink

回答

3

在下面的代码中,我已经将uri传入输入流,然后将文件和输入流数据写入输出流。 这工作100%尝试这种方法。

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

是的,但它的作品,但复制视频文件不会播放任何球员它会被损坏。 – androidXP

+0

你有没有用SD卡测试这个代码android 7.0? – Hamza

相关问题