2017-09-06 2 views
0

メールに署名するなど、クライアントが認証を一切しないようにしたいと思います。クライアントは、クリックするだけですべての共有ファイルを取得する必要があります。URIでGoogleドライブからファイルをダウンロードします(AndroidのGoogleドライブAPIなし)

多くの場所で、HTTP GETで行うことができます。私はGoogleドライブでさまざまなタイプのファイルとサイズで試しましたが、私のコードでは約50kbのファイルが与えられていますが、これはもちろん読めません。

  1. ソースファイルが "Poocha.mp3" である:ここでは例として

  2. 私はこのファイルに対してGoogleから返された共有可能なIDを持っています。

  3. このID、つまり共有可能な文字列は共有可能であることを確認しました。

  4. Androidマニフェストですべての権限を取得しました。

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <uses-permission android:name="android.permission.READ_SMS" /> 
    <uses-permission android:name="android.permission.SEND_SMS" /> 
    <uses-permission android:name="android.permission.WAKE_LOCK" /> 
    <uses-permission android:name="android.permission.VIBRATE" /> 
    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" /> 
    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT" /> 
    <uses-permission android:name="android.permission.CALL_PHONE" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.READ_CONTACTS" /> 
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> 
    <uses-permission android:name="android.permission.READ_CALENDAR" /> 
    <uses-permission android:name="android.permission.WRITE_CALENDAR" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 
    <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    
  5. これは、エミュレータ以外のライブデバイスでテストしています。

  6. このリンクを貼り付けると、「https://drive.google.com/uc?export=download&id=0B5Isk4aTJApuZE9sVzg2MUxvc0U」、 というファイルがブラウザに正しくダウンロードされます。

  7. ただし、以下のコードはドライブリンクのいずれに対しても機能していません。
    しかし、

  8. 私のサーバーに同じファイルをアップロードしてURLを変更すると、ファイルは以下の同じコードで正しくダウンロードされます。私は "pictures.jpg"ファイルでも同じことを試みましたが、Googleドライブのすべてのファイルは不完全な50〜54 KBのファイルを提供し、同じコードがサーバー上の同じファイルに対して機能します。

マイコード:

protected String doInBackground(String... f_url) { 
    int count; 
    String id = "0B5Isk4aTJApuZE9sVzg2MUxvc0U"; 

    try { 

     URL url = new URL("https://drive.google.com/uc?export=download&id=" + id); 

     HttpURLConnection c = (HttpURLConnection) url.openConnection(); 

     c.setRequestMethod("GET"); 

     c.connect(); 

     int lenghtOfFile = c.getContentLength(); 

     InputStream input = new BufferedInputStream(url.openStream(), 8192); 

     String out = Environment.getExternalStorageDirectory().getAbsolutePath() + "/sifr/album"; 

     File filedir = new File(out); 
     if (!filedir.exists()) { 
      filedir.mkdirs(); 
     } 
     OutputStream output = new FileOutputStream(out + "/Poocha.mp3"); 

     byte data[] = new byte[1024]; 

     long total = 0; 

     while ((count = input.read(data)) != -1) { 
      total += count; 
      publishProgress("" + (int) ((total * 100)/lenghtOfFile)); 
      output.write(data, 0, count); 
     } 

     output.flush(); 

     output.close(); 
     input.close(); 

    } catch (Exception e) { 
     Log.i("GetPathLst errr", e + ""); 
    } 
    return null; 
} 

は、誰かが問題を指摘してもらえますか?

答えて

0

ドライブアカウントで共有ファイルを使用してコードを試してみて、ファイルをダウンロードしてください。 Googleドライブから取得する共有URLの形式は、次のとおりです。

https://drive.google.com/open?id=UUjBUTaQyakU0B0HGOaFKlT5geXN 

これ以外は変更なしでコードを実行しました。 (btw、それは本当のidではない)。

こちらがお役に立てば幸いです。


更新

上記の答えは、真ながら、あなたの問題ではありません。 Googleドライブをインストールした状態でAndroid搭載端末で自分のURLを試したところ、ドライブが所有者にファイルを「ゴミ箱」に入れていると教えてくれました。ブラウザで同じURLを試したところ、OKがダウンロードされました。

明らかに、ファイルはダウンロードできますが、ドライブアプリはファイルがゴミ箱になっていないことを確認するために追加チェックを行っているようです。ブラウザーはこれと同じチェックをしません。

ごみ箱からファイルを移動するか、別のファイルをお試しください。それは動作するはずです。

+0

何を説明しましたか? @Cheticamp –

+0

それは本当のidではないのですか? @Cheticamp リンクを右クリックして新しいウィンドウで開き、ファイルがダウンロードされます。同じことが私のコードでは機能していません。 ドライブ共有可能リンクをダウンロード中に問題が発生します。コードが動作します。それは私の質問に焦点を当てています。 もっと詳しいことができればそれは素晴らしいことでしょう。 私はマニフェストの権限を追加しました。 –

+0

@masoomnazirsanadi申し訳ありませんが、それは私が作った明確な声明ではありませんでした。私は私の答えで与えたIDが私のファイルの本当のIDではないことを意味しました。私はあなたの問題を見つけたと思います。私はすぐに私の答えに更新を掲載します。 – Cheticamp

関連する問題