2017-05-26 182 views
0

我能夠使用URL連接下載文件,但如果我的文件名包含空格或%20,那麼我無法下載文件。如何下載文件,如果文件名包含空格或%20

這裏是我的代碼..

class DownloadFileFromURL extends AsyncTask<String, String, String> { 

    /** 
    * Before starting background thread Show Progress Bar Dialog 
    */ 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 

     pDialog = new Dialog(HomeActivity.this, R.style.startdialog); 
     pDialog.setContentView(R.layout.dialog_downloader); 
     progressCircle = (DonutProgress) pDialog.findViewById(R.id.downloadProgress); 
     progressCircle.setFinishedStrokeColor(getResources().getColor(R.color.colorPrimary)); 
     progressCircle.setUnfinishedStrokeColor(getResources().getColor(R.color.hint_color)); 
     progressCircle.setTextColor(getResources().getColor(R.color.colorPrimary)); 
     progressCircle.setProgress(0); 

     pDialog.setCanceledOnTouchOutside(false); 
     pDialog.show(); 

    } 

    /** 
    * Downloading file in background thread 
    */ 
    @Override 
    protected String doInBackground(String... f_url) { 
     int count; 
     try { 
      URL url = new URL(f_url[0]); 
      URLConnection conection = url.openConnection(); 
      conection.connect(); 

      // this will be useful so that you can show a tipical 0-100% 
      // progress bar 
      int lenghtOfFile = conection.getContentLength(); 

      // download the file 
      InputStream input = new BufferedInputStream(url.openStream(), 
        8192); 

      // Output stream 
      OutputStream output = new FileOutputStream(mediapath + f_url[0].substring(f_url[0].lastIndexOf("/") + 1)); 

      byte data[] = new byte[1024]; 

      long total = 0; 

      while ((count = input.read(data)) != -1) { 
       total += count; 
       // publishing the progress.... 
       // After this onProgressUpdate will be called 
       publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 

       // writing data to file 
       output.write(data, 0, count); 
      } 

      // flushing output 
      output.flush(); 

      // closing streams 
      output.close(); 
      input.close(); 

     } catch (Exception e) { 
      Log.e("Error: ", e.getMessage()); 
     } 

     return null; 



    } 

    /** 
    * Updating progress bar 
    */ 
    protected void onProgressUpdate(String... progress) { 
     // setting progress percentage 
     progressCircle.setProgress(Integer.parseInt(progress[0])); 
    } 

    /** 
    * After completing background task Dismiss the progress dialog 
    **/ 
    @Override 
    protected void onPostExecute(String file_url) { 
     // dismiss the dialog after the file was downloaded 
     pDialog.dismiss(); 

    } 

} 

Asynk任務執行

new DownloadFileFromURL().execute(urlString); 

回答

0

試試下面的代碼

try { 
    String urlString = "url string"; 
    URL url = new URL(urlString.replaceAll(" ", "%20")); 

    URLConnection connection = url.openConnection(); 
    connection.setRequestProperty("User-agent", "Mozilla/4.0"); 
    connection.connect(); 



} catch (MalformedURLException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
+0

這不是一個最好的辦法,因爲有很多其他的'%..'符號這可能會導致URL的問題。 – isabsent

0

你從哪裏得到您的f_url?似乎它是畸形的。你必須與

String encodedPath = Uri.encode(path); 

分開f_url到,hostpath,編碼path並建立URI回來

URL url = new URL(protocol, host, encodedPath) 

或其他適當的URL class constructor

0

您可以再次使用replaceAll("","")方法,然後嘗試類似如下:

String replaceURL=s1.replaceAll(" ","%20"); 
相關問題