我知道SF中存在这类问题,但它们非常具体,我需要一个通用的建议。我需要一个功能来上传用户文件,其大小可能超过1 GB。此功能将成为应用程序中现有文件上载功能的附加组件,可满足较小的文件需求。现在,这里有一些选项
请建议。
此外,我要确保此上传过程不会妨碍其他用户的任务,换句话说,不会占用其他用户的黑白。任何可以在n / w级别完成的机制来限制这些过程吗?
最终,客户希望将FTP作为一种选择。但我认为以编程方式处理文件的答案也很酷。
答案 0 :(得分:12)
使用您想要的任何客户端语言(Java App,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);
}
(更复杂的是,可以更准确地调节单流带宽,但在考虑套接字缓冲区等时会变得复杂。“足够好”通常就足够了。)
我的应用程序执行类似于上面的操作 - 我们调节向上(POST
和PUT
)和(GET
)下游带宽。我们每天接受100s MB的文件,并测试高达2GB。 (超过2GB时,需要处理棘手的Java int原语问题。)我们的客户端都是Flex和curl
。它适用于我,它可以为你工作。
虽然FTP非常棒,但您可以通过使用HTTP避免许多(但不是全部)防火墙问题。
答案 1 :(得分:3)
如果您想减少带宽,您可能希望发送压缩的数据(除非已经压缩)这可能会节省2-3倍的数据量,具体取决于您发送的内容。
答案 2 :(得分:1)
有关上传大文件的良好做法示例以及解决方法的各种方法,请查看flickr.com(您可能必须注册才能访问上传页面)
它们提供了各种选项,包括HTTP表单上传,java桌面客户端或某种javascript驱动的小工具,我无法弄清楚。他们似乎没有在任何地方使用闪光灯。
答案 3 :(得分:0)
要将文件发送到服务器,除非 使用HTTP,否则FTP是可行的方法。限制,我不完全确定,至少不是以编程方式。
就个人而言,似乎在服务器端可以更好地完成上传速度的限制。