Java 计算上传文件的大致时间

Java 计算上传文件的大致时间,java,file-upload,Java,File Upload,但问题在于怀疑。我正在将图像从JAR上传到我的服务器。我确实有一个代码来计算爬升所有服务器所需的时间,如下所示: long startTime = System.currentTimeMillis(); long stopTime = System.currentTimeMillis(); long elapsedTime = stopTime - startTime; System.out.println("TIME ::: " + (float)(elapsedTime / 1000) +

但问题在于怀疑。我正在将图像从JAR上传到我的服务器。我确实有一个代码来计算爬升所有服务器所需的时间,如下所示:

long startTime = System.currentTimeMillis();
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
System.out.println("TIME ::: " + (float)(elapsedTime / 1000) + " seg");
现在我正在考虑一个大概的上升时间。这张照片质量很好,延迟时间也很长,我只想为用户提供附加信息。我可以想出第一张图片,计算我上传图片的花费,然后乘以用户在所选文件夹中的图片总值。这似乎是正确的,但如果有更精确、更集成的Java或类似的东西,我想告诉您

现在,我通过以下方式将图像上载到服务器:

public boolean uploadWithThumb(File image, String filename) {
    reconnect();

    try {
        _sftp.cd(Config.Config.IMAGES_FOLDER);
        _sftp.put(new FileInputStream(image), filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE)

        OutputStream output = new ByteArrayOutputStream();
        //preview
        if (Config.Config.WATERMARK_FILE == "" || !(new File(Config.Config.WATERMARK_FILE)).exists()) {
            //no watermark
            Thumbnails.of(image)
                .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE)
                .outputQuality(Config.Config.PREVIEW_QUALITY)
                .toOutputStream(output);
        } else {
            BufferedImage prev = Thumbnails.of(image)
                                           .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE)
                                           .outputQuality(Config.Config.PREVIEW_QUALITY)
                                           .asBufferedImage();
            int wsize = Config.Config.PREVIEW_SIZE * 75 / 100;
            BufferedImage water = Thumbnails.of(Config.Config.WATERMARK_FILE)
                                            .size(wsize, wsize)
                                            .asBufferedImage();
            Thumbnails.of(prev)
                      .size(Config.Config.PREVIEW_SIZE, Config.Config.PREVIEW_SIZE)
                      .watermark(Positions.CENTER, water, 0.5f)
                      .outputFormat(Utils.getExtensionNoDot(image.getAbsolutePath()))
                      .toOutputStream(output);
        }

        InputStream decodedInput = new ByteArrayInputStream(((ByteArrayOutputStream) output).toByteArray());
        _sftp.cd(Config.Config.PREVIEW_FOLDER);
        _sftp.put(decodedInput, filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE)

        //thumbs
        output = new ByteArrayOutputStream();
        Thumbnails.of(image)
                  .size(Config.Config.THUMBS_SIZE, Config.Config.THUMBS_SIZE)
                  .toOutputStream(output);
        decodedInput = new ByteArrayInputStream(((ByteArrayOutputStream) output).toByteArray());
        _sftp.cd(Config.Config.THUMBS_FOLDER);
        _sftp.put(decodedInput, filename, ChannelSftp.OVERWRITE); //no overwrite (, ChannelSftp.OVERWRITE)
    } catch (Exception e) {
        e.printStackTrace();
        return false;
    }

    return true;
}

获取上载所有文件的大致时间的最简单方法是上载一个文件并计算速度:

long firstImageSize = getImageSize(0); //get the size of the first image in bytes
long startTime = System.currentTimeMillis();
UploadFirstImage();  //Upload the first image
long stopTime = System.currentTimeMillis();
long elapsedTime = stopTime - startTime;
float meanSpeed = (float)firstImageSize/ (float)(elapsedTime / 1000);  //mean speed in bytes/second
一旦获得平均上传速度,就必须获得所有其他图像的总体大小。然后,您可以简单地除以以下各项来计算近似的EPlassed time:

long allImagesSize = 0;
for(int i = 1; i<numImages; i++){
  allImagesSize += getImageSize(i);  //Calculate the size of all the images in bytes
}
System.out.println("Eplapsed time ::: " + (float)(allImagesSize / meanSpeed) + " seg");
long allimagesize=0;

对于(int i=1;iHello!),感谢您回答您的代码,但一个案例告诉我这大约需要226秒,而这需要50秒。我使用file.length()获得文件大小上传速度与网络使用情况以及TCP/IP等协议有关,这些协议会改变其传输/接收窗口。要获得更精确的估计,您可以使用相同的代码定期重新计算速度。