2015-01-25 3 views
3

Я загружаю и загружаю файл из Dropbox. Когда я загружаю файл, он загружает его правильно. Когда я загружаю файл и открываю его, файл имеет нулевые байты. Может кто-нибудь сказать мне, почему это происходит?Не удается загрузить файл из Dropbox

Скачать код:

try { 
    File localFile = new File(localFilePath); 
    File fileSelected = new File(dropboxPath); 

    if (!localFile.exists()) { 
     localFile.createNewFile(); 
    } else { 
     //copy(fileSelected, localFile); 
     //mApi.copy("/Test/test.png", "/sdcard/testfile.png"); 

     BufferedInputStream br = null; 
     BufferedOutputStream bw = null; 
     DropboxInputStream fd; 
     try { 
      fd = mApi.getFileStream(fileSelected.getPath(), null); 
      br = new BufferedInputStream(fd); 
      bw = new BufferedOutputStream(new FileOutputStream(localFile)); 

      byte[] buffer = new byte[4096]; 
      int read; 
      while (true) { 
       read = br.read(buffer); 
       if (read <= 0) { 
        break; 
       } 
       bw.write(buffer, 0, read); 
      }  
     } catch (DropboxException e) { 
      e.printStackTrace(); 
     } catch (FileNotFoundException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      if (bw != null) { 
       try { 
        bw.close(); 
        if (br != null) { 
         br.close(); 
        } 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    }/* 
    else { 
     showToast("File already exists"); 
    }*/ 
} 
catch (IOException e) { 
    showToast("Exception"); 
    e.printStackTrace(); 
} 
catch (Exception e) { 
    showToast("Exception"); 
    e.printStackTrace(); 
} 
+1

Вы не вызываете 'close()' – Simon

+0

Я звоню close –

+0

для чего это ссылка? @fge –

ответ

0
/* 
* Copyright (c) 2010-11 Dropbox, Inc. 
* 
* Permission is hereby granted, free of charge, to any person 
* obtaining a copy of this software and associated documentation 
* files (the "Software"), to deal in the Software without 
* restriction, including without limitation the rights to use, 
* copy, modify, merge, publish, distribute, sublicense, and/or sell 
* copies of the Software, and to permit persons to whom the 
* Software is furnished to do so, subject to the following 
* conditions: 
* 
* The above copyright notice and this permission notice shall be 
* included in all copies or substantial portions of the Software. 
* 
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 
* OTHER DEALINGS IN THE SOFTWARE. 
*/ 


package codelynks.easydropbox; 

import android.app.ProgressDialog; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.DialogInterface.OnClickListener; 
import android.graphics.drawable.Drawable; 
import android.os.AsyncTask; 
import android.widget.Toast; 

import com.dropbox.client2.DropboxAPI; 
import com.dropbox.client2.DropboxAPI.Entry; 
import com.dropbox.client2.ProgressListener; 
import com.dropbox.client2.exception.DropboxException; 
import com.dropbox.client2.exception.DropboxIOException; 
import com.dropbox.client2.exception.DropboxParseException; 
import com.dropbox.client2.exception.DropboxPartialFileException; 
import com.dropbox.client2.exception.DropboxServerException; 
import com.dropbox.client2.exception.DropboxUnlinkedException; 

import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 

/** 
* Here we show getting metadata for a directory and downloading a file in a 
* background thread, trying to show typical exception handling and flow of 
* control for an app that downloads a file from Dropbox. 
*/ 

public class Download extends AsyncTask<Void, Long, Boolean> { 


    private Context mContext; 
    private final ProgressDialog mDialog; 
    private DropboxAPI<?> mApi; 
    private String mPath; 

    private Drawable mDrawable; 

    private FileOutputStream mFos; 

    private boolean mCanceled; 
    private Long mFileLen; 
    private String mErrorMsg; 
    private String mDownloadpath; 

    // Note that, since we use a single file name here for simplicity, you 
    // won't be able to use this code for two simultaneous downloads. 
    private final static String IMAGE_FILE_NAME = "dbroulette.png"; 

    public Download(Context context, DropboxAPI<?> api, 
        String dropboxPath, String downloadpath) { 
     // We set the context this way so we don't accidentally leak activities 
     mContext = context.getApplicationContext(); 

     mApi = api; 
     mPath = dropboxPath; 
     mDownloadpath = downloadpath; 
     mDialog = new ProgressDialog(context); 
     mDialog.setMax(100); 
     mDialog.setMessage("Downloading File"); 
     mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
     mDialog.setProgress(0); 

     mDialog.setButton(ProgressDialog.BUTTON_POSITIVE, "Cancel", new OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       mCanceled = true; 
       mErrorMsg = "Canceled"; 

       // This will cancel the getThumbnail operation by closing 
       // its stream 
       if (mFos != null) { 
        try { 
         mFos.close(); 
        } catch (IOException e) { 
        } 
       } 
      } 
     }); 

     mDialog.show(); 
     mDialog.setCanceledOnTouchOutside(false); 
    } 

    @Override 
    protected Boolean doInBackground(Void... params) { 
     try { 
      if (mCanceled) { 
       return false; 
      } 

      // Get the metadata for a directory 
      Entry dirent = mApi.metadata(mPath, 1000, null, true, null); 

      if (dirent.isDir) { 
       // It's not a directory, or there's nothing in it 
       mErrorMsg = "Directory Can't be download"; 
       return false; 
      } 


      if (mCanceled) { 
       return false; 
      } 

      try { 
       mFos = new FileOutputStream(mDownloadpath); 
      } catch (FileNotFoundException e) { 
       mErrorMsg = "Couldn't create a local file to store the image"; 
       return false; 
      } 
      mApi.getFile(mPath, null, mFos, new ProgressListener() { 
       @Override 
       public long progressInterval() { 
        return 500; 
       } 

       @Override 
       public void onProgress(long arg0, long arg1) { 
        mFileLen = arg1;//Total File Length 
        publishProgress(arg0);//Downloaded File Length 
       } 
      }); 


      if (mCanceled) { 
       return false; 
      } 


      // We must have a legitimate picture 
      return true; 

     } catch (DropboxUnlinkedException e) { 
      // The AuthSession wasn't properly authenticated or user unlinked. 
     } catch (DropboxPartialFileException e) { 
      // We canceled the operation 
      mErrorMsg = "Download canceled"; 
     } catch (DropboxServerException e) { 
      // Server-side exception. These are examples of what could happen, 
      // but we don't do anything special with them here. 
      if (e.error == DropboxServerException._304_NOT_MODIFIED) { 
       // won't happen since we don't pass in revision with metadata 
      } else if (e.error == DropboxServerException._401_UNAUTHORIZED) { 
       // Unauthorized, so we should unlink them. You may want to 
       // automatically log the user out in this case. 
      } else if (e.error == DropboxServerException._403_FORBIDDEN) { 
       // Not allowed to access this 
      } else if (e.error == DropboxServerException._404_NOT_FOUND) { 
       // path not found (or if it was the thumbnail, can't be 
       // thumbnailed) 
      } else if (e.error == DropboxServerException._406_NOT_ACCEPTABLE) { 
       // too many entries to return 
      } else if (e.error == DropboxServerException._415_UNSUPPORTED_MEDIA) { 
       // can't be thumbnailed 
      } else if (e.error == DropboxServerException._507_INSUFFICIENT_STORAGE) { 
       // user is over quota 
      } else { 
       // Something else 
      } 
      // This gets the Dropbox error, translated into the user's language 
      mErrorMsg = e.body.userError; 
      if (mErrorMsg == null) { 
       mErrorMsg = e.body.error; 
      } 
     } catch (DropboxIOException e) { 
      // Happens all the time, probably want to retry automatically. 
      mErrorMsg = "Network error. Try again."; 
     } catch (DropboxParseException e) { 
      // Probably due to Dropbox server restarting, should retry 
      mErrorMsg = "Dropbox error. Try again."; 
     } catch (DropboxException e) { 
      // Unknown error 
      mErrorMsg = "Unknown error. Try again."; 
     } 
     return false; 
    } 

    @Override 
    protected void onProgressUpdate(Long... progress) { 
     int percent = (int) (100.0 * (double) progress[0]/mFileLen + 0.5); 
     mDialog.setProgress(percent); 
    } 

    @Override 
    protected void onPostExecute(Boolean result) { 
     mDialog.dismiss(); 
     if (result) { 
      showToast("Downloading Finished"); 
      // Set the image now that we have it 
      //mView.setImageDrawable(mDrawable); 
     } else { 
      // Couldn't download it, so show an error 
      showToast(mErrorMsg); 
     } 
    } 

    private void showToast(String msg) { 
     Toast error = Toast.makeText(mContext, msg, Toast.LENGTH_LONG); 
     error.show(); 
    } 


} 

Вызов фоновый поток, как последовал

Download download = new Download(context, mApi, drop_box_file_path, sdcard_path_to_store); 
     download.execute(); 

Где Mapi является ссылка DropboxAPI

Смежные вопросы