kay*_*aks 1 java networking throttling file-upload large-files
我知道SF中存在这类问题,但它们非常具体,我需要一个通用的建议.我需要一个功能来上传用户文件,其大小可能超过1 GB.此功能将成为应用程序中现有文件上载功能的附加组件,可满足较小的文件需求.现在,这里有一些选择
请建议.
此外,我要确保此上传过程不会妨碍其他用户的任务,换句话说,不会占用其他用户的黑白.任何可以在n/w级别完成的机制来限制这些过程?
最终,客户希望将FTP作为一种选择.但我认为以编程方式处理文件的答案也很酷.
Stu*_*son 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);
}
Run Code Online (Sandbox Code Playgroud)
(更复杂的是,可以更准确地调节单流带宽,但在考虑套接字缓冲区等时会变得复杂."足够好"通常足够好.)
我的应用程序执行类似于上面的操作 - 我们调节向上(POST和PUT)和(GET)下游带宽.我们每天接受100s MB的文件,并测试高达2GB.(超过2GB时,需要处理棘手的Java int原始问题.)我们的客户都是Flex和curl.它对我有用,它可以为你工作.
虽然FTP非常棒,但您可以通过使用HTTP避免许多(但不是全部)防火墙问题.