博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
servlet 上传文件 参数中文乱码
阅读量:7093 次
发布时间:2019-06-28

本文共 3358 字,大约阅读时间需要 11 分钟。

获取数据时需要进行转码 item.getString("网站使用编码utf-8,GBK等");

public class FileUpLoad extends HttpServlet {        public void doPost(HttpServletRequest request, HttpServletResponse response)              throws ServletException, IOException {                    request.setCharacterEncoding("utf-8");  //设置编码                    //获得磁盘文件条目工厂          DiskFileItemFactory factory = new DiskFileItemFactory();          //获取文件需要上传到的路径          String path = request.getRealPath("/upload");          //如果没以下两行设置的话,上传大的 文件 会占用 很多内存,          //设置暂时存放的 存储室 , 这个存储室,可以和 最终存储文件 的目录不同          /**          * 原理 它是先存到 暂时存储室,然后在真正写到 对应目录的硬盘上,           * 按理来说 当上传一个文件时,其实是上传了两份,第一个是以 .tem 格式的           * 然后再将其真正写到 对应目录的硬盘上          */          factory.setRepository(new File(path));          //设置 缓存的大小,当上传文件的容量超过该缓存时,直接放到 暂时存储室          factory.setSizeThreshold(1024*1024) ;                    //高水平的API文件上传处理          ServletFileUpload upload = new ServletFileUpload(factory);                              try {              //可以上传多个文件              List
list = (List
)upload.parseRequest(request); for(FileItem item : list) { //获取表单的属性名字 String name = item.getFieldName(); //如果获取的 表单信息是普通的 文本 信息 if(item.isFormField()) { //获取用户具体输入的字符串 ,名字起得挺好,因为表单提交过来的是 字符串类型的 String value = item.getString() ; request.setAttribute(name, value); } //对传入的非 简单的字符串进行处理 ,比如说二进制的 图片,电影这些 else { /** * 以下三步,主要获取 上传文件的名字 */ //获取路径名 String value = item.getName() ; //索引到最后一个反斜杠 int start = value.lastIndexOf("\\"); //截取 上传文件的 字符串名字,加1是 去掉反斜杠, String filename = value.substring(start+1); request.setAttribute(name, filename); //真正写到磁盘上 //它抛出的异常 用exception 捕捉 //item.write( new File(path,filename) );//第三方提供的 //手动写的 OutputStream out = new FileOutputStream(new File(path,filename)); InputStream in = item.getInputStream() ; int length = 0 ; byte [] buf = new byte[1024] ; System.out.println("获取上传文件的总共的容量:"+item.getSize()); // in.read(buf) 每次读到的数据存放在 buf 数组中 while( (length = in.read(buf) ) != -1){ //在 buf 数组中 取出数据 写到 (输出流)磁盘上 out.write(buf, 0, length); } in.close(); out.close(); } } } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) {
//e.printStackTrace(); } request.getRequestDispatcher("filedemo.jsp").forward(request, response); } }

 

转载于:https://www.cnblogs.com/rchao/p/4745131.html

你可能感兴趣的文章
借鉴bootstrap的方法,快速实现响应式开发
查看>>
windows+python3.6下安装fasttext+fasttext在win上的使用+gensim(fasttext)
查看>>
C# 语法特性
查看>>
查询锁谁阻塞了谁
查看>>
zabbix报错整理--持续更新
查看>>
类和实例
查看>>
uglifyjs2全局混淆
查看>>
在centos上,oracle数据库更改IP后无法启动监听,解决方法
查看>>
JAVA语言基础组成(1)
查看>>
Smarty的基本语法------变量调节器
查看>>
上架流程:(0)上架流程
查看>>
vim 代码提示功能,让vim可以媲美IDE(转)
查看>>
Hive Explain(翻译自Hive wiki)
查看>>
node开子线程模块--tagg2
查看>>
c# excel xls保存
查看>>
php curl的隐藏BUG
查看>>
程序员眼中的中国传统文化-王阳明《传习录》
查看>>
1216 递归下降分析法
查看>>
ajax四,封装ajax并优化
查看>>
剑指offer 第九天
查看>>