2012-01-05 3 views
4

Добрый день, я пытаюсь отправить файл с SDCard через OutputStream. Я намерен получить URI из имени файла, которое у меня есть, а затем использовать InputStream для чтения URI и конвертировать в байты в других для отправки. В настоящее время код застрял в get InputStream (как указано ниже), и ничего не происходит.Проблемы с чтением inputStream из Uri и отправка через outputStream android

Кроме того, я не знаю, правильно ли я использую URI, чтобы получить фактический путь к отправляемому файлу.

Пожалуйста, любая помощь будет принята с благодарностью, потому что я застрял здесь некоторое время. Спасибо.

Мой код:

public void sendFile() { 
    Log.d(TAG, "sending data"); 
    InputStream inputStream = null; 
    String filePath = Environment.getExternalStorageDirectory() 
      .toString() + "/" + files.get(0); 
    Log.d(TAG, "filepath is" + filePath); 

    Uri uri = Uri.parse(filePath); 

    Log.d(TAG, "obtained input stream here in Activity"); 
    Log.d(TAG, "Uri here is" + uri); // nothing happens after here, Basically stuck!! 
    try { 
     inputStream = getContentResolver().openInputStream(uri); 
     ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream(); 
     Log.d(TAG, "obtained input stream here in Activity"); 

     int buffersize = 1024; 
     byte[] buffer = new byte[buffersize]; 

     int len = 0; 
     while ((len = inputStream.read(buffer)) != -1) { 
      byteBuffer.write(buffer, 0, len); 
     } 

     AppServices.write(byteBuffer.toByteArray()); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    finally { 
     if (inputStream != null) { 
      try { 
       inputStream.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
} 

ответ

1

Использование:

Uri uri = Uri.fromFile(new File(filePath)); 

или просто использовать:

inputStream = new FileInputStream(filePath); 
+0

Я попробовал оба из них, но ничего не кажется, происходит. не может даже достичь выхода logcat после этой строки inputStream = getContentResolver(). openInputStream (uri) ;. не знаю почему ?. – irobotxxx

+1

извините, но это фактический файл, который он получает или только путь? .. – irobotxxx

+0

'Файл' - это в основном ссылка на файл (даже если он еще не существует). –

0

Я попытался с помощью InputStream is = ctx.getContentResolver().openInputStream(Uri.parse("file://"+fileUri)); Но это не будет резать. Он возвращает результаты более раннего байта. Я пробовал читать этот путь, но это тоже не работало.

while (is.available() > 0) { 
      outputStream.write(is.read(b)); 
} 

Чтобы сделать его работу я делаю так:

fileUri парам это строка, как: «/ мнт/SDCard/DCIM/Camera/2013-05-07 15.53 .47.jpg»

public static byte[] getImageAsBytes(String fileUri) throws IOException { 
    if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) { 
     return null; 
    } 
    //Get file stream 
    FileInputStream is = new FileInputStream(fileUri); 
    //create output stream 
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 
    //create buffer 
    byte[] b = new byte[1024]; 
    //Read the input to the bytestream 
    int len = 0; 
    while((len = is.read(b)) != -1){ 
     outputStream.write(b, 0, len); 
    } 
    is.close(); 
    //convert to bytearray 
    final byte[] byteArray = outputStream.toByteArray(); 
    outputStream.close(); 
    return byteArray; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^