2015-05-25 141 views
0

我試圖下載一個文件(它可以像圖像,PDF,文本等的任何文件)使用fileMetadata.getWebContentLink()下載文件()

當我打印這個鏈接它顯示像這個:

https://drive.google.com/uc?id=0Bw6vr2LNxB3iUFJrTk5oZDljaTA&export=download 

當我把這個鏈接到我的桌面瀏覽器的文件被自動下載。但我不能下載到我的應用程序。 我用這個link下載使用new DownloadFileAsync().execute(fileMetadata.getWebContentLink());

當我讓文件公開訪問我的谷歌驅動器然後它的工作,否則它不工作。 任何人都可以知道爲什麼會發生這種情況,以及如何解決這個問題?

+0

取而代之的是webcontentlink,使用exportlinks – pinoyyid

回答

-2

按照以下步驟下載隨機文件。創建一個名爲DownloadFileAsync.java

public class DownloadFileAsync extends AsyncTask<String, String, String> { 
    public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
    private ProgressDialog mProgressDialog; 

    private Context context; 

    public DownloadFileAsync(Context context) 
{ 
this.context = context; 
mProgressDialog = new ProgressDialog(context); 
mProgressDialog.setMessage("Downloading file.."); 
mProgressDialog.setIndeterminate(false); 
mProgressDialog.setMax(100); 
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
mProgressDialog.setCancelable(true); 

} 

@Override 
protected void onPreExecute() { 
super.onPreExecute(); 
mProgressDialog.show(); 
} 

@Override 
protected String doInBackground(String... aurl) { 

try { 
    File root = Environment.getExternalStorageDirectory(); 
    URL u = new URL(aurl[0]); 
    HttpURLConnection c = (HttpURLConnection) u.openConnection(); 
    c.setRequestMethod("GET"); 
    c.setDoOutput(true); 
    c.connect(); 

    int lenghtOfFile = c.getContentLength(); 

    FileOutputStream f = new FileOutputStream(new File(root + "/", aurl[1])); 

    InputStream in = c.getInputStream(); 

    byte[] buffer = new byte[1024]; 
    int len1 = 0; 
    long total = 0; 

    while ((len1 = in.read(buffer)) > 0) { 
     total += len1; //total = total + len1 
     publishProgress("" + (int)((total*100)/lenghtOfFile)); 
     f.write(buffer, 0, len1); 
    } 
    f.close(); 
} catch (Exception e) { 
    Log.d("Downloader", e.getMessage()); 
} 

return null; 

} 

protected void onProgressUpdate(String... progress) { 
Log.d("ANDRO_ASYNC",progress[0]); 
mProgressDialog.setProgress(Integer.parseInt(progress[0])); 
} 

@Override 
protected void onPostExecute(String unused) { 
mProgressDialog.dismiss(); 
} 


    } 

呼叫您的活動上面的類類爲

new DownloadFileAsync(TransformerActivity.this).execute(Constants.VIDEO_DOWNLOAD_LINK,"9T51B0108.mp4"); 
+0

我試過你的方法與圖像,雖然我的文件可以是任何類型。但圖像不能正確構建。例如我在驅動器上的實際圖像尺寸是25K,但是在SD卡中它顯示大約48K。 @Vinay Jayaram – kkkk

+0

這不是問題的答案。這只是使用他們的URL下載Java文件的通用代碼片段。 – azmuhak

+0

完全不相關的問題。 –

1

WebcontentLink只能在瀏覽器中。

這裏的步驟下載文件在您的應用程序,因爲它是陳述here

  1. 檢索驅動文件對象,然後打開該文件的內容。 (內容爲二進制)
  2. 用輸入流讀取內容,保存並關閉它。