0

我使用标准的 java 文件流来上传文件。当我尝试上传 25MB 大小的 zip 文件时,花了将近 11 分钟。但是当我试图在 yousendit.com 一个文件上传网站上上传该文件时,只需要 25 秒。以下是我的代码


            File file = new File(destination + fileName);
            FileOutputStream fileOutputStream = new FileOutputStream(file);

            byte[] buffer = new byte[1024];
            InputStream in = dataHandler.getDataSource().getInputStream();
            int len = in.read(buffer);

            while (len != -1) {
                fileOutputStream.write(buffer, 0, len);
                len = in.read(buffer);
            }

            fileOutputStream.flush();
            fileOutputStream.close();

我没有加快上传速度的想法?是否有任何其他 3rd 方 API 或任何其他建议?

4

3 回答 3

1

您可以将文件拆分为多个块并在单独的线程中上传每个块。据我所知,HTTP 标准定义了帮助服务器将块连接在一起的特殊标头。

从查看Apcahe的FileUpload开始

于 2013-05-09T09:59:19.597 回答
0

您可以使用 flash 或 html5 插件将文件上传到您的服务器,然后对您服务器上的文件执行操作,我认为这样会快得多。

于 2013-05-09T09:59:51.537 回答
0

如果软件堆栈在上传时无法达到每秒 40kb 的吞吐量,那就是非常错误的事情。

我建议你增加buffer. 把它放大 10 倍,看看你是否得到了加速。

如果这没有帮助,我建议您分析您的系统以尝试确定瓶颈所在。您编写的代码不应该是 CPU 密集型的。如果是这样,理解为什么会很有启发性。

我的猜测是要么你有一个写得特别糟糕的过滤器“上游”该代码......要么问题根本不在应用程序中,尽管网络团队认为。也许这是虚拟化/虚拟网络的问题。

于 2013-05-09T09:59:52.520 回答