1

我在我的项目中使用 milton 服务器来支持 webdav 协议,但是有一个问题。这是我的上传(PUT)方法代码:

public DavFile upload(InputStream is, String name) {
    DavFile davFile = null;

    if (is != null) {
        File newFile = new File(name);
        BufferedOutputStream os = null;
        byte[] buffer = new byte[1024 * 1024];
        int size;

        try {
            os = new BufferedOutputStream(new FileOutputStream(newFile, false), buffer.length);
            while ((size = is.read(buffer)) > 0) {
                System.out.println("Log: " + name + " | " + size);
                os.write(buffer, 0, size);
            }

            Util.closeOutputStream(os);
            davFile = new DavFile(newFilePath);
        } catch (Exception ex) {
            Util.writeLog(ex);
        } finally {
            Util.closeInputStream(is);
            Util.closeOutputStream(os);
        }
    }

    return davFile;
}

这是输出:

Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 7834
Log: 722267_119335884931029_2021941220_n.mp4 | 3145

如何增加 milton 服务器中 InputStream 的读取大小?我无法将 InputStream 更改为任何其他类型,例如 BufferedInputStream!

在我的本地计算机上,上传速度是 27KB/s,这太慢了!!!

4

2 回答 2

3

该代码没有理由应该快或慢。字节将以网络适配器提供的速率接收,使用 BufferedInputStream 无济于事,因为网络适配器已经有效地接收字节。

看到本地上传速度达到 27KB/s,我感到非常惊讶,我以前从未见过这么慢的蚂蚁。

我刚刚对我目前正在使用的 milton 服务器进行了快速测试,该服务器对文件进行了非常复杂的处理,包括分块和 SHA1 计算,它给出了以下结果: 上传时间 = 8541 毫秒 大小 = 82,954,392 字节带宽 = 9,712,491 字节/秒

您如何测试上传速度,是来自客户端还是服务器?由于客户端在实际上传之前和之后所做的所有 PROPFIND 请求的高延迟,有时从客户端测量时,您可能会获得明显缓慢的上传。不过,这不应该是大文件的一个因素(例如 50Mb 或更多)。

如果您使用 Win7 进行测试,请确保您启用了 cookie 身份验证,否则 Windows 将每次上传两次,第一次没有凭据,然后再次使用凭据。

/布拉德

于 2013-10-02T21:39:53.573 回答
0

“Milton,一个在 Java Servlet 中实现的开源 WebDAV 库,它允许您的应用程序中的任何数据通过 WebDAV 公开。下面是一个同时使用 Milton、Hibernate 和 Tomcat 的示例,其中使用了在 Tomcat 上运行的 Milton提供对 Hibernate 数据的基于 WebDAV 的访问。其他基于 Java 的 WebDAV 项目在构建您自己的项目时可能很有用,包括 Jigsaw、Apache Jackrabbit 和现已退休的 Jakarta Slide。

基于此,如果 Milton 确实运行在 Tomcat 服务器之上,您可以尝试在 tomcat 中启用 gzip 压缩。

于 2013-10-02T08:40:50.760 回答