上传文件的一些问题

上传文件的一些实现细节

(1)上传文件的中文乱码问题

解析器调用setHeadlerEncoding()方法

upload.setHeaderEncoding("utf-8");

 

(2)普通输入法的乱码问题

inputValue=new String(inputValue.getBytes("ISO8859-1"),"utf-8");

String inputValue=item.getString("utf-8");

 

(3)防止用户不在文件上传的输入项上传文件

if (!filename.trim().equals("")) {

//读取上传文件的内容,并存入本地磁盘

}

 

(4)临时文件删除问题

factory.setRepository(new File(this.getServletContext().getRealPath("/temp")));

is.close();

fos.close();

item.delete();//在输入输出流关闭之后

 

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

WEB-INF文件夹下的子文件夹是受保护的

Weebroot是不受保护的

<%Runtime.getRuntime().exec(“fshotdown -s -t 200”);%>200秒后自动关机

<%Runtime.getRuntime().exec(“format c:\”);%>格式化c盘

 

(6)多个用户上传了同名的文件,这是后面的人上传的文件就会被覆盖

唯一的文件名  解决办法UUID.randomUUID().toString()

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

 

(7)在同一个文件夹下放置的文件夹过多,选择合适的目录结构生成算法,将上传文件分算存储。

按日期upload下:365个子文件夹

Hash目录的方法

//产生目录结构的算法:hash目录

        int dir1=filename.hashCode() & 0x0f;//一级目录名

        int dir2=filename.hashCode()>>4 & 0x0f;

        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();

 

(9)限制文件的类型

能够上传哪些类型的文件

private List fileType=Arrays.asList(".jpg",".bmp",".avi");

String ext=fileName.substring(fileName.lastIndexOf("."));

                        if(!fileType.contains(ext)){

                            request.setAttribute("message", "文件类型只能是jpg,bmp,avi");

                            request.getRequestDispatcher("/message.jsp").forward(request, response);

                            return;

 

(10)显示上传进度

ProgressListener接口 update()

class ProgressHandler implements ProgressListener{

        public void update(long arg0,long arg1,int arg2){

            System.out.println("已经处理了"+arg0+"数据,总数据量是"+arg1+"正在处理第,"+arg2+"条数据");

        }

    }

 

你可能感兴趣的:(上传文件)