博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件上传
阅读量:5063 次
发布时间:2019-06-12

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

文件上传

首先写一个文件上传的页面

jsp页面:

    
文件描述
文件上传

在写servlet前解决文件重名问题
使用UUID作为随机的文件名

public class UUIDUtils {    public static String getUUID(){        return UUID.randomUUID().toString().replace("-", "");    }        public static String getUUIDFileName(String fileName){        return UUID.randomUUID().toString().replace("-", "")+"_"+fileName;    }}

解决一个目录下存放的文件过多的问题

public class UploadUtils {    public static String getPath(String uuidFileName){        // 使用唯一文件名.hashCode();        int code1 = uuidFileName.hashCode();        int d1 = code1 & 0xf; // 获得到1级目录.        int code2 = code1 >>> 4;        int d2 = code2 & 0xf; // 获得到2级目录.        return "/"+d1+"/"+d2;    }}

此处的servlet是用的servlet3.0

/** * 文件上传的Servlet */@WebServlet("/UploadServlet")@MultipartConfigpublic class UploadServlet extends HttpServlet {    private static final long serialVersionUID = 1L;    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // 接收普通数据:        request.setCharacterEncoding("UTF-8");        String filedesc = request.getParameter("filedesc");        System.out.println("文件描述"+filedesc);        // 接收文件:        Part part = request.getPart("upload");                long size = part.getSize();// 获得文件大小:        System.out.println("文件大小:"+size);        String name = part.getName();        System.out.println("文件表单中的name属性的名称"+name);        // 获得文件名:        String header = part.getHeader("Content-Disposition");        int idx = header.lastIndexOf("filename=\"");        String fileName = header.substring(idx+10, header.length()-1);        System.out.println("文件名:"+fileName);        // 获得文件内容:        InputStream is = part.getInputStream();        // 获得upload的路径:        String path = this.getServletContext().getRealPath("/upload");        // 获得文件的唯一文件名:        String uuidFileName = UUIDUtils.getUUIDFileName(fileName);        String realPath = path+UploadUtils.getPath(uuidFileName);        File file = new File(realPath);        if(!file.exists()){            file.mkdirs();        }        OutputStream os = new FileOutputStream(realPath+"/"+uuidFileName);        byte[] b = new byte[1024];        int len = 0;        while((len = is.read(b))!=-1){            os.write(b, 0, len);        }        is.close();        os.close();    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}

 

转载于:https://www.cnblogs.com/learnjfm/p/6958200.html

你可能感兴趣的文章
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
Windows Phone Marketplace 发布软件全攻略
查看>>
Unity3D研究院之打开Activity与调用JAVA代码传递参数(十八)【转】
查看>>
语义web基础知识学习
查看>>
hexo个人博客添加宠物/鼠标点击效果/博客管理
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
关于WPF的2000件事 02--WPF界面是如何渲染的?
查看>>
单元测试、、、
查看>>
SVN使用教程总结
查看>>
JS 浏览器对象
查看>>
TestNG入门
查看>>
【ul开发攻略】HTML5/CSS3菜单代码 阴影+发光+圆角
查看>>
虚拟中没有eth0
查看>>
Unity 3D游戏开发学习路线(方法篇)
查看>>
BZOJ2049[Sdoi2008]Cave 洞穴勘测(LCT模板)
查看>>
vuex插件
查看>>
2011年12月09日
查看>>
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>