package com.mvc.controller;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller("userController")
@RequestMapping("/user")
public class UserController {
private int count = 0;
@RequestMapping(value = "/add.do")
public String addUser() {
// TODO Auto-generated constructor stub
return "user/add_success";
}
@SuppressWarnings("static-access")
@RequestMapping(value = "/download.do")
@ResponseBody
/*
* byte[] bytes = new byte[10240];//每次读入的字节为10k
* outputStream.flush();//把缓存清空提交数据
* Thread.currentThread().sleep(1000);//睡眠一秒中
*这里的count没有用到同步锁,但是有点误差是很有效率的。
*
* 即是一秒钟之内提交10k的数据
*/
public String download(HttpServletRequest request, HttpServletResponse response){
count++;
System.out.println("++++Thread :"+Thread.currentThread().getName());//打印线程名字,可以看到是不同的
System.out.println("++++count :"+count);
response.setContentType("application/x-download");
response.setHeader("Conten-Disposition", "attachment;filename="+"my.txt");
File file = new File("/home/tinmoo/chineseAN.txt");
InputStream inputStream = null;
ServletOutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
inputStream = new FileInputStream(file);
byte[] bytes = new byte[512000];//第一次读入的字节为0.5MB
int length = -1;
while ((length = inputStream.read(bytes))!= -1 ) {
outputStream.write(bytes, 0, length);
/*
* 下面两句是必须的
*/
outputStream.flush();//把缓存清空提交数据
Thread.currentThread().sleep(999);//睡眠一秒中
bytes = new byte[900000/count];//根据请求人数控制流量
}
inputStream.close();
outputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(count > 0){
count--;
}
return null;
}
}