0

我正在使用 Apache 和 Async 在 FTP 上上传文件。问题在于,在大文件(即 200 Mb)上,进度条会重新开始其进度,但上传仍在继续(我从计算机上检查了 FTP)。

这是我在 Logcat 中看到的:

1->2->3->4->5->6->7->8-> -8 -> -7 .... to 8 and starts again

异步后台代码:

con = new FTPClient();
con.setConnectTimeout(300000);
con.setDataTimeout(300000);
// con.setKeepAlive(true);

con.connect("host IP",21);                
if (con.login("user", "password"))
{
    con.enterLocalPassiveMode(); // important!
    con.setFileType(FTP.BINARY_FILE_TYPE);

    boolean directoryExists = con.changeWorkingDirectory(Email);
    File CloudVersionSysForRestore = new File(getFilesDir()+File.separator+"Cloud Version.itb");

    try {
        CloudVersionSysForRestore.createNewFile();
        OutputStream OutstreamCloud = new FileOutputStream(new File(CloudVersionSysForRestore.getPath()));                                  
        con.retrieveFile("/"+Email+"/Cloud Version.itb", OutstreamCloud);

        OutstreamCloud.close();

        if(x!=2){
            BufferedReader bufferedReader = new BufferedReader(new FileReader(new File(getFilesDir()+File.separator+"Cloud Version.itb")));
            String read;
            StringBuilder builder = new StringBuilder("");

            while((read = bufferedReader.readLine()) != null) {
                Log.w("READ", read);
                builder.append(read);
            }
            bufferedReader.close();

            long getintfromstring = Long.parseLong(builder.toString());           
            if(getintfromstring<Version){
                Log.w("Version", String.valueOf(Version));
                try{
/************************************ UPLOAD + Progress ****************************/
                    long fileSize = DBToUploadFromInternalStorage.length();
                    int sentBytes = 0;
                    InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);        
                    System.out.println("Start uploading second file");
                    OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
                    byte[] bytesIn = new byte[4 * 1024];
                    int read1 = 0;                           
                    while ((read1 = inputStream.read(bytesIn)) !=-1) {
                        outputStream.write(bytesIn, 0, read1);
                        sentBytes+=read1;
                        final int progress = (int) ((sentBytes * 100) / fileSize);

                        runOnUiThread(new Runnable() {
                            public void run() {
                                pd.setProgress(progress);
                                Log.w("Progress", String.valueOf(progress));
                            }
                        });
                    }                                 
                    outputStream.close();
                    inputStream.close();

/************************************ UPLOAD + Progress ****************************/
                }
                catch(Exception e){
                    e.printStackTrace();
                    x=2;
                }

                boolean completed = con.completePendingCommand();

对于龙来说是这样的吗?

/************************************ UPLOAD + Progress ****************************/
                                                 long fileSize = DBToUploadFromInternalStorage.length();
                                                 long sentBytes = 0;
                                                 InputStream inputStream = new FileInputStream(DBToUploadFromInternalStorage);    

                                                     System.out.println("Start uploading second file");
                                                     OutputStream outputStream = con.storeFileStream("PilotLogbookDB.itb");
                                                     byte[] bytesIn = new byte[4 * 1024];
                                                     int read1 = 0;                           
                                                     while ((read1 = inputStream.read(bytesIn)) !=-1) {

                                                         outputStream.write(bytesIn, 0, read1);
                                                         sentBytes+=read1;
                                                         final long progress = (long) ((sentBytes * 100) / fileSize);



                                                         runOnUiThread(new Runnable() {
                                                             public void run() {

                                                                 pd.setProgress(Long.bitCount(progress));
                                                                 Log.w("Progress", String.valueOf(progress));




                                                             }
                                                         });
                                                     }


                                                     outputStream.close();
                                                     inputStream.close();








                                               /************************************ UPLOAD + Progress ****************************/
4

1 回答 1

0

您使用的是int进度计数器(sentBytesfinal int progress = /*...*/

final int progress = (int) ((((double) sentBytes) / fileSize)  * 100);

或者,如果您有更大的文件(> 2 GB),您可能更喜欢使用long.

于 2013-08-02T22:08:04.983 回答