diff options
| author | Jonathan Bauer | 2014-10-27 14:25:56 +0100 |
|---|---|---|
| committer | Jonathan Bauer | 2014-10-27 14:25:56 +0100 |
| commit | d2861ece69415c3e8a4962ab673c1460d6136d6c (patch) | |
| tree | 49f78640d62ed326e74c366fd25bc9a40e2849ad | |
| parent | Merge branch 'master' of ssh://git.openslx.org/openslx-ng/tutor-module (diff) | |
| download | tutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.tar.gz tutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.tar.xz tutor-module-d2861ece69415c3e8a4962ab673c1460d6136d6c.zip | |
[client] rework upload code, should fix upload rate problems
| -rw-r--r-- | dozentenmodul/src/main/java/ftp/FTPUtility.java | 1 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/ftp/UploadTask.java | 58 | ||||
| -rw-r--r-- | dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java | 3 |
3 files changed, 36 insertions, 26 deletions
diff --git a/dozentenmodul/src/main/java/ftp/FTPUtility.java b/dozentenmodul/src/main/java/ftp/FTPUtility.java index fffc5503..4ad91c90 100644 --- a/dozentenmodul/src/main/java/ftp/FTPUtility.java +++ b/dozentenmodul/src/main/java/ftp/FTPUtility.java @@ -42,6 +42,7 @@ public class FTPUtility { this.port = port; this.username = user; this.password = pass; + this.ftpClient.setBufferSize(0); } /** diff --git a/dozentenmodul/src/main/java/ftp/UploadTask.java b/dozentenmodul/src/main/java/ftp/UploadTask.java index eff96d68..40a79f55 100644 --- a/dozentenmodul/src/main/java/ftp/UploadTask.java +++ b/dozentenmodul/src/main/java/ftp/UploadTask.java @@ -18,14 +18,18 @@ import models.Image; * */ public class UploadTask extends SwingWorker<Void, Void> { - + /** - * Logger instance for this class. + * Logger instance for this class. */ private final static Logger LOGGER = Logger.getLogger(UploadTask.class); - + // 8MB buffer - private static final int BUFFER_SIZE = 8 * 1024 * 1024;; + private static final int BUFFER_SIZE = 1024 * 1024; + + private static final double UPDATE_INTERVAL_SECONDS = 0.6; + private static final double UPDATE_INTERVAL_MS = UPDATE_INTERVAL_SECONDS * 1000; + private static final double BYTES_PER_MIB = 1024 * 1024; private String host; private int port; @@ -64,21 +68,28 @@ public class UploadTask extends SwingWorker<Void, Void> { percentCompleted = 0; long fileSize = uploadFile.length(); Image.image.setFilesize(fileSize); - long start = System.nanoTime(); - final double NANOS_PER_SECOND = 1000000000.0; - final double BYTES_PER_MIB = 1024 * 1024; - while ((bytesRead = inputStream.read(buffer)) != -1 - && isCancelled() == false) { + firePropertyChange("filesize", 0, fileSize); + long lastUpdate = 0; + long currentBytes = 0; + long lastBytes = 0; + while ((bytesRead = inputStream.read(buffer)) != -1 && !isCancelled()) { util.writeFileBytes(buffer, 0, bytesRead); - totalBytesRead += bytesRead; - percentCompleted = (int) (totalBytesRead * 100 / fileSize); - double speed = NANOS_PER_SECOND / BYTES_PER_MIB - * totalBytesRead / (System.nanoTime() - start + 1); - setProgress(percentCompleted); - firePropertyChange("speed", 0, speed); - firePropertyChange("filesize", 0, fileSize); - firePropertyChange("bytesread", 0, totalBytesRead); + currentBytes += bytesRead; + long now = System.currentTimeMillis(); + if (lastUpdate + UPDATE_INTERVAL_MS < now) { + totalBytesRead += currentBytes; + percentCompleted = (int) ((totalBytesRead * 100) / fileSize); + setProgress(percentCompleted); + lastBytes = (lastBytes * 2 + currentBytes) / 3; + final double speed = lastBytes / UPDATE_INTERVAL_SECONDS; + firePropertyChange("speed", 0, speed / BYTES_PER_MIB); + firePropertyChange("bytesread", 0, totalBytesRead); + lastUpdate = now; + currentBytes = 0; + } } + percentCompleted = (int) ((totalBytesRead * 100) / fileSize); + setProgress(percentCompleted); inputStream.close(); @@ -102,16 +113,15 @@ public class UploadTask extends SwingWorker<Void, Void> { */ @Override protected void done() { - if (!isCancelled() && percentCompleted==100) { + if (!isCancelled() && percentCompleted == 100) { LOGGER.info("Datei erfolgreich hochgeladen."); - JOptionPane.showMessageDialog(null, - "Datei erfolgreich hochgeladen.", "Message", - JOptionPane.INFORMATION_MESSAGE); - } else if(!isCancelled() && percentCompleted != 100){ + JOptionPane.showMessageDialog(null, "Datei erfolgreich hochgeladen.", + "Message", JOptionPane.INFORMATION_MESSAGE); + } else if (!isCancelled() && percentCompleted != 100) { LOGGER.error("Datei wurde unvollständig hochgeladen."); JOptionPane.showMessageDialog(null, - "Datei wurde unvollständig hochgeladen. Bitte wiederholen.", "Message", - JOptionPane.INFORMATION_MESSAGE); + "Datei wurde unvollständig hochgeladen. Bitte wiederholen.", + "Message", JOptionPane.INFORMATION_MESSAGE); } } } diff --git a/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java b/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java index 43df4d12..ad420aec 100644 --- a/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java +++ b/dozentenmodul/src/main/java/gui/image/FTPCreateUploader_GUI.java @@ -621,8 +621,7 @@ public class FTPCreateUploader_GUI extends JFrame implements speed = (double) arg0.getNewValue(); // if(speed<=1){ - lblUpSpeed.setText(String.valueOf(speed).substring(0, - String.valueOf(speed).lastIndexOf(".") + 3) + lblUpSpeed.setText(String.format("%.2f", speed) + " MB/s"); } |
