java - 文件上传的路径问题
阿神
阿神 2017-04-18 09:46:01
[Java讨论组]
public class UploadServlet3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //检测form是否是multipart/form-data类型的
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            throw new RuntimeException("The form's enctype attribute value must be multipart/form-data");
        }
        //解析请求内容
        DiskFileItemFactory factory = new DiskFileItemFactory();    //产生FileItem的工厂
        ServletFileUpload sfu = new ServletFileUpload(factory);
        List<FileItem> items = new ArrayList<FileItem>();
        try {
            items = sfu.parseRequest(request);
        } catch (FileUploadException e) {
            throw new RuntimeException("解析请求失败");
        }
        //遍历:
        for (FileItem item : items) {
            //处理普通字段
            if (item.isFormField()) {
                processFormField(item);
            } else {
                //处理上传字段
                processUploadField(item);
            }
        }


    }

    protected void processUploadField(FileItem item) {
        try {
            InputStream in = item.getInputStream();
            //找一个存放文件的位置;存放的文件名
            String fileName = item.getName();   //上传的文件的文件名
            if (fileName != null) {
                fileName = FilenameUtils.getName(fileName);
            }
            //存放路径
            String realPath = getServletContext().getRealPath("/WEB-INF/files");
            File storeDirectory = new File(realPath);
            if (!storeDirectory.exists()) {
                storeDirectory.mkdirs();
            }

            //OutputStream out = new FileOutputStream(new File(storeDirectory, fileName));

            //int len = -1;
            //byte[] b = new byte[1024];
            //while ((len = in.read(b)) != -1) {
            //    out.write(b, 0, len);
            //}
            //in.close();
            //out.close();

            item.write(new File(storeDirectory, fileName));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    protected void processFormField(FileItem item) {
        //打印到控制台
        String fieldName = item.getFieldName();
        String fieldValue = item.getString();
        System.out.println(fieldName + "=" + fieldValue);
    }
}

其中:

        //存放路径
        String realPath = getServletContext().getRealPath("/WEB-INF/files");
        

在部署到tomcat中后,并没有发现上传后的文件在WEB-INF目录下,这样不就不能保证服务器端的安全吗?反而是在项目根目录下发现的。

阿神
阿神

闭关修行中......

全部回复(3)
PHP中文网

jsp的表单提交给servlet的路径错误

迷茫

WEB-INFO这个路径好像是比较特殊,普通的读写都不能再这个目录下。我之前也遇到过,硬是读不出数据来。

PHP中文网

文件不建议放在应用服务路径下,可以考虑通过配置文件放在特定文件夹下,如果没有特殊的权限要求,这些文件可以通过nginx或者Apache去访问。应用服务器的部署或者重启都可能让文件丢失

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号