`
yaasshole
  • 浏览: 664442 次
文章分类
社区版块
存档分类
最新评论

上传文件细节处理问题(包括中文乱码、限制文件大小、显示上传速度、删除临时文件,随机生成文件夹等)

 
阅读更多

上传文件细节处理问题

一 中文乱码问题

1.上传文件的中文乱码问题

用解析器的对象去调用setHeaderEncoding方法设置就行

// (1)创建一个解析器工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

// (2)得到解析器

ServletFileUpload upload = new ServletFileUpload(factory);

upload.setHeaderEncoding("utf-8");

注:

request.setCharacterEncoding(“utf-8”);解决的是用post方法提交的参数,并且设置到的是 request.getParament(“user”)的字符编码。

2. 普通输入项的中文乱码问题

第一种:inputValue = new String(inputValue.getBytes("iso8859-1"),

"utf-8");

第二种:String inputValue = item.getString("utf-8");

注:inputVaule是:

String inputName = item.getFieldName(); // 输入项的名称

String inputValue = item.getString(); // 输入项的value值

二 防止用户不在文件上传的输入项中输入上传文件

用法是:判断获取到的是否为空,最好截取左右两边的空串

代码:

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

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

// 得到上传的文件名

fileName = fileName.substring(fileName.lastIndexOf("\\") + 1);

InputStream is = item.getInputStream();// 得到上传的输入流

// 输出到本地磁盘上

FileOutputStream fos = new FileOutputStream("c:\\"

+ fileName);

byte[] buff =new byte[1024];

int len = 0;

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

fos.write(buff, 0, len);

}

is.close();

fos.close();

}

三 删除临时文件
临时文件出现的原因是上传的文件过大,超出了DiskFileItemFactory.setSizeThreshold方法设置的内存缓冲区的大小,Commons-fileupload组件将使用临时文件保存上传数据,因此在程序结束时,务必调用FileItem.delete方法删除临时文件。

1. 指定保存临时文件的目录

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

2.删除临时文件

is.close();

fos.close();

item.delete();

四 文件的存放位置:服务的安全性

为保证服务器安全,上传文件应保存在应用程序的WEB-INF目录下,或者不受WEB服务器管理的目录。

首先确定上传的文件要保存在哪个目录下 保证文件的安全性,在WEB-INF下

String savePath = this.getServletContext().getRealPath(

"WEB-INF/upload");

构建输出流对象

FileOutputStream fos = new FileOutputStream(savePath

+ "\\" + fileName);

注:在webRoot下是不受保护的

五 多个用户上传了同名的文件,这时后面的人上传的文件就会覆盖原来的文件,可以给定唯一的文件名来保证

UUID类是用来随机的生成唯一的标识符

String fileName = item.getName();

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

六 防止在同一个文件夹下存放的目录过多

解决:在同一个文件夹下放置的文件过多,可以根据可能的文件上传总量,选择合适的目录结构生成算法,将上传文件分散存储

1. 打散存储的方法

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

public String generateFilePath(String path,String fileName){

//得到一级目录名 得到的是内存的地址()哈希码

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();//多级目录的创建

}

return savePath;

}

2.调用:

String savePath =this.getServletContext().getRealPath(

"WEB-INF/upload");

savePath = generateFilePath(savePath, fileName);

七 限制上传文件的大小

// 限制上传文件的大小 为1兆

1. 设置

upload.setFileSizeMax(1024 * 1024);

2.用异常去捕获

catch (FileUploadBase.FileSizeLimitExceededException e) {

request.setAttribute("message", "上传的文件不能超过1M");

}

八 限制上传文件的类型

1. 定义能上传哪些类型的文件

第一种:

String[] arr ={".jpg",".bmp",".avi"};

Private List fileType = Arrays.asList(arr);

第二种:

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

九 显示上传进度

使用ProgressListener接口中的 Update抽象方法,系统会自动的传参数,并且在显示的时候用内部类,或者是匿名类。

1.内部类

class ProgressHandlerimplements ProgressListener{

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

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

}

}

2.调用:upload.setProgressListener(new ProgressHandler());

分享到:
评论

相关推荐

    尝试制作一个假的随机生成器/点名器-打包文件

    自己制作的假的随机生成器/点名器的打包文件,可以不安装QT直接使用。在自己的win10电脑下未发现bug,如果乱码,可能是文件夹名称问题,文件夹改成英文。

    TrueCrypt的国内延伸版本CnCrypt V1.11(单一文件绿色版)

    主要为用户提供便捷的电脑磁盘加密功能,能创建加密的“虚拟磁盘文件”(类似虚拟光驱,大小可以自定义),所有加密数据都是经过AES等加密算法的运算后的结果,无法破解。CnCrypt提供多种加密算法,包括:AES-256, ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    本书是第II卷,以开发人员在项目开发中经常遇到的问题和必须掌握的技术为中心,介绍了应用Java进行桌面程序开发各个方面的知识和技巧,主要包括Java语法与面向对象技术、Java高级应用、窗体与控件应用、文件操作...

    EXCEL集成工具箱V8.0完整增强版(精简)

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    EXCEL集成工具箱V6.0

    【综合计算显示】 综合计算并显示选中区域存储格的最大值、最小值、平均值、求和、存储格个数、筛选状态下的的加总求和,以及显示选区包含的数字、字符、汉字的个数等信息。 【GB2转BIG5】 将选中区域存储格的简体...

    C#编程经验技巧宝典

    100 <br>0159 如何实现0~9之间随机整数 101 <br>0160 如何实现0~1之间随机数 101 <br>0161 如何返回数字的绝对值 101 <br>5.2 控件数据处理技巧 102 <br>0162 如何实现C#中用键完成TAB的...

    JAVA 范例大全 光盘 资源

    常见问题 读取Properties文件出现中文乱码 182 第9章 Java异常处理与反射机制 183 实例73 运用throws、throw、try与catch 183 实例74 throws声明异常的实例 185 实例75 自定义异常类 187 实例76 使用finally...

    Sysprep Chief Executive Officer系统封装首席执行官

    SC程序自带反馈功能,可以通过文字和图片的形式反馈给我们,在部署过程中如果发生意外,SC部署程序会自动在WINDOWS文件夹下生成一个Scbug.html文件,为了不遗留文件在客户机上,该文件会在第二次重启自动删除,所以...

    淘客帝国破解版

    2:上传文件夹中的upload文件中至网站根目录,或子目录 3:登陆后台http://域名/admin/ 并修改配置站点信息 初始账号:admin 密码:admin 4:logo默认路径img/风格/logo.gif 用您自己的LOGO覆盖即可! 【更新内容】...

    仿世纪佳缘婚介交友系统5.3 ASP+SQL

    都可以通过列表下面的选择操作进行审核、生成等操作,根据各个管理列表,操作是一样的。下面如果不是特殊功能,就不在重复介绍。 重点说明:分类管理中[功能帮助]类别,初始建站都会遇到帮助中心的分类页无法更新...

    asp.net知识库

    帮助解决网页和JS文件中的中文编码问题的小工具 慎用const关键字 装箱,拆箱以及反射 动态调用对象的属性和方法——性能和灵活性兼备的方法 消除由try/catch语句带来的warning 微软的应试题完整版(附答案) 一个...

Global site tag (gtag.js) - Google Analytics