您的位置:首页 > 其它

上传文件的一些细节:

2011-11-24 12:13 309 查看
1、 文件上传中文乱码:upload.setHeaderEncoding(“ ”);

2、 普通输入项的乱码:item.getString(“ ”);

3、 防止用户不再文件上传的输入项输入上传文件:if(!filename.trim,eques(“”)){}

4、 临时文件删除问题:factory.setRepository(new File(this.getServletContext().getRealPath("/temp"));

……….

Is.close();

Fos.close();

Item.delete();

5、 上传文件保存位置:服务的安全性

不受服务器管理的目录:在c盘

外界不能访问的:在web-inf的子文件夹中

6、 防止上传文件的名字一样被覆盖掉:

给予为一个文件名

filename=UUID.randomUUID().toString()+ "_" + filename;

7、 在同一个文件夹下过多的

Hash目录

//产生目录结构的算法:hash目录
public String generateFilePath(String path,String filename){

//位运算?
int dir1 = filename.hashCode() & 0xf;//一级目录,让得到的hash码和一个十六进制得数进行与运算
int dir2 = (filename.hashCode()>>4) & 0xf; //二级目录

String savepath = path + "\\" + dir1 + "\\" + dir2;
File f = new File(savepath);
if(!f.exists()){ //若目录结构不存在,则要建一个目录
f.mkdirs(); //注意必须用mkdirs() 而不是mkdir()
}
return savepath;
}

8、、限制上传文件大小

upload.setFileSizeMax(1024*1024);
upload.setSizeMax(1024*1024*3);

9、 限制上传类型:

方法一:

String[] arr={“.jpg”,”.bmp”,”.avi”,”.txt”};

List fileType= Arrays.asList(arr);

方法二:

List fileType= Arrays.asList(“.jpg”,”.bmp”,”.avi”,”.txt”);

if(!filename.trim().equals("")){
filename=filename.substring(filename.lastIndexOf("\\")+1);//因为使用的不同浏览器进行访问,为了得到文件名
String var=filename.substring(filename.lastIndexOf("."));
if(!fileType.contains(var)){
request.setAttribute("message","上传的文件只能是.jpg,.bmp,.avi,.txt的格式!");
request.getRequestDispatcher("/message.jsp").forward(request, response);
return ;
}
}

10、 上传多个文件

11、 显示上传进度

ProgressListener接口 中的方法update()

ProgressListener接口 中的方法update()

l ProgressListener显示上传进度

ProgressListener progressListener = new ProgressListener() {

public void update(long pBytesRead, long pContentLength, int pItems) {

System.out.println("到现在为止, " + pBytesRead + " 字节已上传,总大小为 "

+ pContentLength);

}

};

upload.setProgressListener(progressListener);

l 以KB为单位显示上传进度

long temp = -1; //temp注意设置为类变量

long ctemp = pBytesRead /1024;

if (mBytes == ctemp)

return;

temp = mBytes;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: