您的位置:首页 > 编程语言 > Java开发

Struts中文件的上传和下载-笔记

2013-05-20 15:38 441 查看
7.struts中文件的上传和下载

7.1 如果表单中,控件类型是file ,那么在创建表单的时候,对应的类型应该是FormFile

如:<input type="file" name="myphoto">

那么对应的表单中 定义应该是 private FormFile myphoto;

在action中,使用:

FormFile formFile = new userForm.getMyphoto();

通过formFile可以获得用户上传的文件的各种信息

InputStream is = null;

OutputStream os = null;

//得到输入流

is = formFile.getInputStream();

//得到输出流 首先要知道把文件放在上面地方

//1.得到file文件夹在tomcat路径下的绝对路径

this.getServlet().getServletContext().getRealPath(/file);

os = new FileOutputStream(keepFilePath+"\\"+fileName);

//读取文件并写入到服务器

int len = 0;

byte bytes[] = new byte[1024];

int len;

byte bytes[] = new byte[1024];

while((len=is.read(bytes))>0){

//读一点,写一点

os.write(bytes, 0, len);

}


7.2如果表单中有文件控件,则需要重新指定表单的编码方式:

<form enctype="multipart/form-data" >


7.3 需要解决的问题:

7.3.1:如果上传的文件名相同,怎么处理?

使用jdk下的uuid 去解决:uuid类下的,randomUUID()



7.4 show variables like '%char%'

set character_set_client-gbk;

set character_set_results-gbk;

7.5 注意:过滤器对get请求不生效

<img src=""> 这个是以get请求方式发送的



7.6:抓包用httpwatch

7.7文件下载:

7.7.1 首先要获得下载文件的绝对路径

String filePath = this.getServlet()getServeltContext().getRealPath("\\file")

String fileAllPath = filePath+"\\"+user.getPhotos();

FileInputStream fis = null;

OutputStream os = null;

byte []buffer = new byte[1024];

try{

fis = new FileInputStream(fileAllPath);

os = response.getOutputStream();

int len =0;

while((len=fis.read(buffer)>0)){

os.write(buffer,0,len);

}

}



7.8 在action的开头还要写:

response.setContentType("text/html;charset=utf-8");

response.setHeader("Content-Disposition","attachment;filename="+user.getNewName());



如果文件名有中文,下载的时候,需要进行编码

java.net.URLEncoder.encode(filename,"utf-8");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: