不多说了,自己看吧
public class FlowControlInputStream extends FilterInputStream{
private long timestamp;
private int maxbps;
private int currentbps;
private int bytesread;
//----------------------------------------------------------
//constructor
public FlowControlInputStream(InputStream in, int maxbps){
super(in);
this.maxbps = maxbps;
this.currentbps = 0;
this.bytesread = 0;
this.timestamp = System.currentTimeMillis();
}
//----------------------------------------------------------
//decorated methods
public int read() throws IOException{
synchronized(in){
int avaliable = check();
if(avaliable == 0){
waitForAvailable();
avaliable = check();
}
int value = in.read();
update(1);
return value;
}
}
public int read(byte[] b) throws IOException{
return read(b, 0, b.length);
}
public int read(byte[] b, int off, int len) throws IOException{
synchronized(in){
int avaliable = check();
if(avaliable == 0){
waitForAvailable();
avaliable = check();
}
int n = in.read(b, off, Math.min(len, avaliable));
update(n);
return n;
}
}
private int check(){
long now = System.currentTimeMillis();
if(now - timestamp >= 1000){
timestamp = now;
currentbps = bytesread;
bytesread = 0;
return maxbps;
}else{
return maxbps - bytesread;
}
}
private void waitForAvailable(){
long time = System.currentTimeMillis() - timestamp;
boolean isInterrupted = false;
while(time < 1000){
try{
Thread.sleep(1000 - time);
}catch(InterruptedException e){
isInterrupted = true;
}
time = System.currentTimeMillis() - timestamp;
}
if(isInterrupted)
Thread.currentThread().interrupt();
return;
}
private void update(int n){
bytesread += n;
}
public int getCurrentbps(){
return currentbps;
}
}
public class FlowControlOutputStream extends FilterOutputStream {
private long timestamp;
private int maxbps;
private int currentbps;
private int byteswrite;
public FlowControlOutputStream(OutputStream out, int maxbps) {
super(out);
this.maxbps = maxbps;
this.currentbps = 0;
this.byteswrite = 0;
this.timestamp = System.currentTimeMillis();
}
public void setMaxbps(int maxbps){
this.maxbps = maxbps;
}
@Override
public void write(int oneByte) throws IOException {
synchronized(out){
int avaliable = check();
if(avaliable <= 0){
waitForAvailable();
}
out.write(oneByte);
update(1);
}
}
@Override
public void write(byte[] buffer) throws IOException {
write(buffer, 0, buffer.length);
}
@Override
public void write(byte[] buffer, int offset, int length) throws IOException {
synchronized(out){
int avaliable = check();
if(avaliable <= 0){
waitForAvailable();
}
out.write(buffer, offset, length);
update(length);
}
}
private int check(){
long now = System.currentTimeMillis();
if(now - timestamp >= 1000){
timestamp = now;
currentbps = byteswrite;
byteswrite = 0;
return maxbps;
}else{
return maxbps - byteswrite;
}
}
private void waitForAvailable(){
long time = System.currentTimeMillis() - timestamp;
boolean isInterrupted = false;
while(time < 1000){
try{
Thread.sleep(1000 - time);
}catch(InterruptedException e){
isInterrupted = true;
}
time = System.currentTimeMillis() - timestamp;
}
if(isInterrupted)
Thread.currentThread().interrupt();
return;
}
private void update(int n){
byteswrite += n;
}
public int getCurrentbps(){
return currentbps;
}
}
分享到:
相关推荐
### TC+IPTables 实现下载和上传带宽限制脚本详解 #### 一、概述 在 Linux 系统中,网络流量控制是一项重要的系统管理任务。通过对带宽进行合理分配和限制,可以有效地提高网络资源的利用率,保障关键业务的服务...
- **文件大小限制**:防止过大文件导致服务器资源耗尽,可以通过配置限制上传和下载文件的大小。 - **文件名安全**:避免用户上传具有特殊路径的文件名,可能导致路径遍历攻击。应使用安全的文件命名策略。 - **...
在标题和描述中提到的这款工具,是一款独立的网络流量监控软件,它无需安装,简化了使用步骤,提供了便捷的流量控制功能,能够限制网络的上传和下载速度,同时也具备查看当前网络连接的能力。 网络流量监控的首要...
10. **日志记录**:跟踪和记录每一次上传下载活动,便于故障排查和审计。 在实现这些功能时,开发者通常会使用HTTP或FTP协议,有时也会用到WebDAV等更高级的协议。服务器端可能采用如Node.js、Python Flask、Java ...
1. **安全第一**:在下载和安装任何补丁前,请确保文件的安全性,避免恶意软件的侵入。 2. **兼容性问题**:不同的迅雷版本可能需要不同版本的补丁,安装前需确认补丁版本与迅雷版本相匹配。 3. **官方支持**:虽然...
文件上传和下载是Web应用程序中的核心功能之一,无论是用户向服务器提交个人资料、分享文档,还是从服务器获取资源,如软件更新、电子书籍等,都离不开这一操作。在这个过程中,前端与后端的交互以及数据的安全传输...
完整的文件上传和下载,直接拷入自己的action中即可运行,实测有效。
以上就是关于“Tomcat上传下载文件”的知识点,包括了Struts2的文件上传处理、Servlet的文件下载实现以及相关的文件操作。在实际开发中,还需要考虑文件的安全性,例如防止上传恶意文件、限制上传文件大小、保护下载...
1. 在实现JSP文件上传和下载时,需要注意文件上传的大小限制,避免上传大文件引发的服务器崩溃。 2. 在实现JSP文件上传和下载时,需要注意文件的安全性,避免恶意攻击和数据泄露。 3. 在实现JSP文件上传和下载时,...
在提供的压缩包文件中,"down"和"load"可能是两个关键的目录或文件,它们可能分别代表了下载和上传的实现代码或者示例。通常,一个Web项目会包含Web-INF目录,其中存放web.xml配置文件,定义Servlet和JSP的映射关系...
- **允许特定类型文件上传**:紧接着创建一条新规则,例如“*.mdb”,并赋予相应的上传、下载和删除权限。 8. **测试与验证**:完成规则设置后,应该进行实际测试以确保规则生效。可以尝试上传不同类型的文件,...
在实际应用中,我们还需要考虑错误处理、文件权限管理、大文件上传的分块处理、文件的预览功能、以及安全性问题,比如防止恶意文件上传、限制上传文件类型等。对于大文件上传,可以使用流式处理或分块上传,以避免一...
综上所述,JSP实现图片和文件上传下载涉及到前端HTML表单、后端JSP或Servlet处理、文件存储管理、安全措施以及性能优化等多个环节。理解并熟练掌握这些知识点,能够帮助开发者构建稳定、安全、高效的文件上传下载...
在PHP中,文件上传和下载是两个非常重要的功能,它们在Web开发中有着广泛的应用,例如用户上传头像、分享文件或下载资源等。本文将详细介绍如何使用PHP实现这两个功能。 首先,我们从文件上传开始。PHP提供了`$_...
### IIS6 上传文件限制详解 ...需要注意的是,虽然提高了文件上传的限制,但也应考虑到服务器资源的合理分配和安全性的维护。在实际部署中,还需结合具体应用场景综合考虑各种因素,以确保系统的稳定性和安全性。
然而,许多用户可能不知道,迅雷在停止下载和共享后,仍会在后台持续上传已下载的文件内容,这一行为可能会消耗大量的系统资源和网络带宽。迅雷利用P2P(点对点)技术,构建了一个庞大的数据交换网络,这正是其下载...
在这个“asp.net简单网络文件夹实现上传下载(限制文件类型大小)”的项目中,我们将探讨如何使用ASP.NET来实现在Web应用中进行文件的上传和下载,并且添加了对文件类型和大小的限制,以增强安全性。 1. 文件上传:...
RaySource客户端是Rayfile网盘(飞速网网盘)专用客户端,它可以帮您: 1. 上传文件到您的网盘,可选择同一...5. 可限制上传和下载的速度; 6. 可进行语言设置,支持中英文界面切换; 7. 更方便的操作体验。
在Java编程领域,文件上传和下载是Web应用中常见的功能,尤其在用户交互丰富的网站或系统中。本项目通过一个简单的源码实例,演示了如何实现在JSP(JavaServer Pages)界面上处理文本和图片的上传与下载,涵盖了相关...
- **安全性**:在处理上传文件时,要防止恶意文件、超大文件或不安全文件名,需要进行大小限制、文件类型检查和重命名策略。 2. **文件下载** - **响应头设置**:为了触发浏览器的下载行为,需要在HTTP响应头中...