2014-06-10 3 views
0

Я пытаюсь загрузить и сохранить файл на SD-карте. Файл url выглядит следующим образом:Прочитайте входной поток и загрузите с помощью DownloadManager

http://test.com/net/Webexecute.aspx?fileId=120 

Этот url предоставляет поток данных. У меня есть следующая опция для чтения входного потока.

  • Используйте общие входной и выходной поток (без обработчиков для подключения не обязательно кадра)

  • Скачать менеджер

  • Использование HttpURLConnection (возможные шансы таймаута)

У меня есть выполнили загрузку с использованием опции a. Но нет обработчиков для сбоев подключения. Поэтому я решил пойти с опцией b

DownloadManager dm = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE); 
Request request = new Request(Uri.parse("http://test.com/net/Webexecute.aspx?fileId="+ fileId)); 
request.setMimeType("application/pdf"); 
request.setDescription("fileDownload"); 
request.setTitle(fileName); 
request.setNotificationVisibility(Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
dm.enqueue(request); 

Загружается файл. Однако файл кажется поврежденным.

Выполняя исследование, я никогда не обнаружил, что DownloadManager используется для извлечения входного потока и сохранения его в файл. Есть ли что-то, чего мне не хватает?

ответ

0

Пожалуйста, измените ваш код, чтобы загрузить файл.

защищен Пустота DownloadFile (String fileURL) {

int count; 
    try 
    { 

     URL url = new URL(fileURL); 
     URLConnection conexion = url.openConnection(); 
     conexion.connect(); 
     int lenghtOfFile = conexion.getContentLength(); 
     InputStream is = url.openStream(); 

     File testDirectory = new File(Environment.getExternalStorageDirectory() + "/Download"); 
     if (!testDirectory.exists()) 
     { 
      testDirectory.mkdir(); 
     } 

     FileOutputStream fos = new FileOutputStream(testDirectory + "/filename.txt"); 


     byte data[] = new byte[1024]; 
     long total = 0; 
     int progress = 0; 
     while ((count = is.read(data)) != -1) 
     { 
      total += count; 
      int progress_temp = (int) total * 100/lenghtOfFile; 

      fos.write(data, 0, count); 

     } 
     is.close(); 
     fos.close(); 

     readStringFromFile(testDirectory); 

    } 
    catch (Exception e) 
    { 
     Log.e("ERROR DOWNLOADING", "Unable to download" + e.getMessage()); 
     e.printStackTrace(); 
    } 
    return null; 

метод ниже используется для чтения строки из файла.

public String readStringFromFile(File file){ 
     String response=""; 
     try 
     { 
      FileInputStream fileInputStream= new FileInputStream(file+"/filename.txt"); 
      StringBuilder builder = new StringBuilder(); 
      int ch; 
      while((ch = fileInputStream.read()) != -1){ 
       builder.append((char)ch); 
      } 
      response = builder.toString(); 

     } 
     catch (FileNotFoundException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (IOException e) 
     { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return response; 
    } 

Позвольте мне знать, вы все еще сталкиваются с какой-либо вопрос ..

Благодаря

+0

Спасибо за вход! Да, это сработает. У меня есть читатель рабочего потока. Однако этот метод не имеет обработчика сбоев подключения. – Renjith