servlet做的文件下载功能,弹出对话框,能保存成功,但是打开不对。比如:点击test.log,弹出对话框,点“打开”,打开的是test[1].log,并且内容为空。
解决方案 »
- help! java做的socket服务端接收不到http的请求数据
- Java中的final关键字可以修饰非数据成员以外的数据吗?谢谢
- Java 3D Error:wglGetExtensionsStringARB not support!
- 用runtime在Terminal中打开了一个程序,程序关闭问题,急 100分,解决马上给分,谢谢
- 谁知道IDE的文体编辑器的提示是用什么写的吗?
- 值得探讨的问题,关于unicode(熟悉Unicode的进)
- log4j 如何通过配置文件实现日志信息入库,不写代码只是写配置文件?????
- Java中复制文件的效率测试
- C中的htonl用来转换IP到long型,Java中那个函数提供相同功能?
- 问一下,这里的final是什么意思, 要来做什么用的?
- datefield的问题
- 刚毕业,方向迷茫
是不是我的系统有问题啊
public class ControllerServlet extends HttpServlet {
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
try{
request.setCharacterEncoding("gb2312");
String fileName = "temp.txt";
String filePath = "e:/temp/temp.txt";
File f = new File(filePath);
int length = (int)f.length();
int size = length/64;
response.setContentType("text/plain");
String s = "attachment;filename="+fileName;
response.setHeader("Content-Disposition",s); ServletOutputStream out = response.getOutputStream();
int startIndex = 0;
for(int i = 0;i<=size;i++){
Object[] params = new Object[3];
params[0] = filePath;
params[1] = new Integer(startIndex);
params[2] = new Integer(64);
String[] signature = new String[3];
signature[0] = "java.lang.String";
signature[1] = "java.lang.Integer";
signature[2] = "java.lang.Integer";
byte[] ret = (byte[])this.downLoadFile(filePath,new Integer(startIndex) , new Integer(64));
out.write(ret); startIndex = (i+1)*64;
}
out.close();
}catch(Throwable e){
//logger.error("下载文件出错", e);
} }
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
doProcess(request, response);
}
private byte[] downLoadFile(String fileName,Integer beginIndex,Integer size){
RandomAccessFile raf = null;
try{
File f = new File(fileName);
raf= new RandomAccessFile(f,"r");
int length = (int)f.length();
if(beginIndex.intValue()+size.intValue()>length){
byte[] ret = new byte[length-beginIndex.intValue()];
raf.seek(beginIndex.intValue());
raf.read(ret);
return ret;
}else{
byte[] ret = new byte[size.intValue()];
raf.seek(beginIndex.intValue());
raf.read(ret);
return ret;
}
}catch(IOException e) {
e.printStackTrace();
return null;
} finally {
try {
if (raf != null) {
raf.close();
}
}catch (Exception e) {
e.printStackTrace();
}
} }}