Utilisation de Dropbox API pour télécharger un fichier avec Android

Comment puis-je télécharger un fichier (fichier graphique, audio et vidéo) avec Android à l'aide de l'API Dropbox vers Dropbox? J'ai suivi le didacticiel sur la page Android Dropbox SDK et je pouvais faire fonctionner l'échantillon. Mais maintenant, au lieu d'une Chaîne, je veux télécharger un objet Fichier réel et je suis en difficulté.

L'exemple de code fonctionne sans problème et ressemble à ceci:

  • JDK 7 avec Android SDK R13 dans Windows 7
  • AssetManager $ AssetInputStream.finalize () a expiré après 10 secondes
  • Android Vibrate on touch?
  • OnActivityResult ne déclenche pas si le mode d'activité de lancement est singleInstance
  • Comment faire une pause en utilisant DownloadManager?
  • Obtenir une référence à un Fragment d'enfant après que le Fragment parent a été recréé
  • String fileContents = "Hello World!"; ByteArrayInputStream inputStream = new ByteArrayInputStream(fileContents.getBytes()); try { Entry newEntry = mDBApi.putFile("/testing_123456.txt", inputStream, fileContents.length(), null, null); } catch (DropboxUnlinkedException e) { Log.e("DbExampleLog", "User has unlinked."); } catch (DropboxException e) { Log.e("DbExampleLog", "Something went wrong while uploading."); } 

    Mais quand j'essaie de le changer et de télécharger un fichier réel avec ce code:

      File tmpFile = new File(fullPath, "IMG_2012-03-12_10-22-09_thumb.jpg"); // convert File to byte[] ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(bos); oos.writeObject(tmpFile); bos.close(); oos.close(); byte[] bytes = bos.toByteArray(); ByteArrayInputStream inputStream = new ByteArrayInputStream(bytes); try { Entry newEntry = mDBApi.putFile("/IMG_2012-03-12_10-22-09_thumb.jpg", inputStream, tmpFile.length(), null, null); } catch (DropboxUnlinkedException e) { Log.e("DbExampleLog", "User has unlinked."); } catch (DropboxException e) { Log.e("DbExampleLog", "Something went wrong while uploading."); } 

    Je n'ai pas réussi à obtenir une erreur DropboxException. Je pense que quelque chose où j'essaie de convertir l'objet Fichier sur le flux d'octets doit se tromper, mais ce n'est qu'une hypothèse.

    Outre l'exemple String, il n'y a rien d'autre documenté sur la page Dropbox pour Android.

    Merci pour toute aide.

  • Impossible de récupérer le backspace dans codemirror, sous Phonegap sur Android 4.x?
  • Mesure de la fréquence cardiaque à l'aide de Xiaomi MiBand et BLE
  • Android Snackbar TextAlignment in Center
  • Quelle est la précision du monde réel des accéléromètres du téléphone lorsqu'il est utilisé pour le positionnement?
  • Puis-je changer mon bouton d'emplacement dans les cartes Android
  • (Dis-) Avantage d'avoir plusieurs modules dans un projet Android Studio?
  • 4 Solutions collect form web for “Utilisation de Dropbox API pour télécharger un fichier avec Android”

    J'ai trouvé la solution – si quelqu'un s'intéresse ici, c'est le code de travail:

     private DropboxAPI<AndroidAuthSession> mDBApi;//global variable File tmpFile = new File(fullPath, "IMG_2012-03-12_10-22-09_thumb.jpg"); FileInputStream fis = new FileInputStream(tmpFile); try { DropboxAPI.Entry newEntry = mDBApi.putFileOverwrite("IMG_2012-03-12_10-22-09_thumb.jpg", fis, tmpFile.length(), null); } catch (DropboxUnlinkedException e) { Log.e("DbExampleLog", "User has unlinked."); } catch (DropboxException e) { Log.e("DbExampleLog", "Something went wrong while uploading."); } 

    Voici une autre implémentation de Dropbox API pour télécharger et télécharger un fichier. Cela peut être implémenté pour tout type de fichier.

     String file_name = "/my_file.txt"; String file_path = Environment.getExternalStorageDirectory() .getAbsolutePath() + file_name; AndroidAuthSession session; public void initDropBox() { AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); session = new AndroidAuthSession(appKeys); mDBApi = new DropboxAPI<AndroidAuthSession>(session); mDBApi.getSession().startOAuth2Authentication(MyActivity.this); } Entry response; public void uploadFile() { writeFileContent(file_path); File file = new File(file_path); FileInputStream inputStream = null; try { inputStream = new FileInputStream(file); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { response = mDBApi.putFile("/my_file.txt", inputStream, file.length(), null, null); Log.i("DbExampleLog", "The uploaded file's rev is: " + response.rev); } catch (DropboxException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void downloadFile() { File file = new File(file_path); FileOutputStream outputStream = null; try { outputStream = new FileOutputStream(file); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } DropboxFileInfo info = null; try { info = mDBApi.getFile("/my_file.txt", null, outputStream, null); Log.i("DbExampleLog", "The file's rev is: " + info.getMetadata().rev); } catch (DropboxException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); if (mDBApi.getSession().authenticationSuccessful()) { try { // Required to complete auth, sets the access token on the // session mDBApi.getSession().finishAuthentication(); String accessToken = mDBApi.getSession().getOAuth2AccessToken(); /** * You'll need this token again after your app closes, so it's * important to save it for future access (though it's not shown * here). If you don't, the user will have to re-authenticate * every time they use your app. A common way to implement * storing keys is through Android's SharedPreferences API. */ } catch (IllegalStateException e) { Log.i("DbAuthLog", "Error authenticating", e); } } } 

    -> Appelez le fichier uploadFile () et downLoadFile () dans le fil enfant sinon il vous donnera l'exception

    -> Pour cela utiliser AsyncTask et appeler cette méthode ci-dessus dans la méthode doInBackground.

    J'espère que cela sera utile … Merci

    La réponse de @ e-nature est plus que correcte … Je pensais simplement indiquer à tout le monde sur le site officiel de Dropbox qui montre comment télécharger un fichier et bien plus encore .

    En outre, la réponse de @ e-nature écrase les fichiers avec le même nom, donc, si vous ne voulez pas ce comportement, utilisez simplement .putFile au lieu de .putFileOverwrite . .putFile a un argument supplémentaire, vous pouvez simplement ajouter null à la fin. Plus d'infos .

    Voici un autre exemple qui utilise l'API Dropbox v2 mais un SDK tiers. Il est exactement le même pour Google Drive, OneDrive et Box.com.

     // CloudStorage cs = new Box(context, "[clientIdentifier]", "[clientSecret]"); // CloudStorage cs = new OneDrive(context, "[clientIdentifier]", "[clientSecret]"); // CloudStorage cs = new GoogleDrive(context, "[clientIdentifier]", "[clientSecret]"); CloudStorage cs = new Dropbox(context, "[clientIdentifier]", "[clientSecret]"); new Thread() { @Override public void run() { cs.createFolder("/TestFolder"); // <--- InputStream stream = null; try { AssetManager assetManager = getAssets(); stream = assetManager.open("UserData.csv"); long size = assetManager.openFd("UserData.csv").getLength(); cs.upload("/TestFolder/Data.csv", stream, size, false); // <--- } catch (Exception e) { // TODO: handle error } finally { // TODO: close stream } } }.start(); 

    Il utilise le SDK Android CloudRail

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.