我知道 SF 中存在此类问题,但它们非常具体,我需要一个通用的建议。我需要一个用于上传大小可能超过 1 GB 的用户文件的功能。此功能将是应用程序中现有文件上传功能的附加功能,可满足较小的文件需求。现在,这里有一些选项

  1. 使用 HTTP 和 Java 小程序。以块的形式发送文件并在服务器上将它们连接起来。但如何限制n/w。
  2. 使用 HTTP 和 Flex 应用程序。它比小程序更好吗?关于浏览器兼容性和任何其他环境问题?
  3. 使用 FTP 或 SFTP 而不是 HTTP 作为协议以加快上传过程

请建议。

此外,我必须确保此上传过程不会妨碍其他用户的任务,或者换句话说,不会占用其他用户的黑白。有什么机制可以在 n/w 级别上完成来限制此类进程?

最终客户希望将 FTP 作为一种选择。但我认为以编程方式处理文件的答案也很酷。

有帮助吗?

解决方案

用于将文件发送到服务器,除非您 要使用 HTTP,FTP 是最佳选择。节流,我不完全确定,至少不是以编程方式。

就个人而言,似乎上传速度的限制在服务器端会更好地实现。

其他提示

使用您想要的任何客户端语言(Java 应用程序、Flex 等),然后使用以下命令推送到服务器 HTTP PUT (无 Flex)或 POST. 。在服务器端 Java 代码中,调节输入流循环中的字节流。一个粗略、简单的示例片段,将带宽限制为不超过平均 <= 10KB/秒:

InputStream is = request.getInputStream();
OutputStream os =  new FileOutputStream(new File("myfile.bin"));
int bytesRead = 0;
byte[] payload = new byte[10240];

while (bytesRead >= 0) {
    bytesRead = is.read(payload);

    if (bytesRead > 0) 
        os.write(payload, 0, bytesRead);

    Thread.currentThread().sleep(1000);
}

(随着复杂性的增加,我们可以更准确地调节单流带宽,但是当考虑套接字缓冲区等时,它会变得复杂。“足够好”通常就足够好了。)

我的应用程序执行与上述类似的操作 - 我们将两者都向上调节(POSTPUT) 和 (GET)下行带宽。我们每天接受数百 MB 的文件,经测试最大可达 2GB。(超过 2GB 还需要处理烦人的 Java int 原始问题。)我们的客户既是 Flex 又是 curl. 。它对我有用,对你也有用。

虽然 FTP 非常棒,但您可以通过使用 HTTP 来避免许多(但不是全部)防火墙问题。

如果您想减少带宽,您可能需要发送压缩的数据(除非已经压缩),这可能会节省 2-3 倍的数据量,具体取决于您发送的内容。

有关上传大文件的良好实践示例以及解决该问题的各种方法,请访问 flickr.com(您可能需要注册才能访问上传者页面)

它们提供了各种选项,包括 HTTP 表单上传、java 桌面客户端或某种我不太了解的 javascript 驱动的小工具。他们似乎没有在任何地方使用闪光灯。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top