• jsp+servlet实现多个图片(附件)和其他信息同时上传


     

      首先实现图片上传要将jsp页面的form类型改为多enctype="multipart/form-data",即设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,当有了这个设置,就可以在servlet中获取了:

    public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
    
            request.setCharacterEncoding("utf-8");
            News news = new News();
            try {
                // 实例化一个硬盘文件工厂,用来配置上传组件ServletFileUpload
                DiskFileItemFactory factory = new DiskFileItemFactory();
                factory.setSizeThreshold(4096); // 设置缓冲区大小,这里是4kb
                // 用以上工厂实例化上传组件
                ServletFileUpload upload = new ServletFileUpload(factory);
                upload.setSizeMax(4194304); // 设置最大文件尺寸,这里是4MB
                // 设置上传的地址
                String uploadPath = this.getServletContext().getRealPath(
                        "/upload/images");
                System.out.println("uploadPath=====" + uploadPath);
                List items = upload.parseRequest(request);// 得到所有的上传文件
                Iterator it = items.iterator();
                // 逐条处理
                while (it.hasNext()) {
                    // 得到当前文件
                    FileItem fi = (FileItem) it.next();
                    // 检查当前项目是普通表单项目还是上传文件
                    if (fi.isFormField()) {// 如果是普通表单项目,显示表单内容。
                        request.setCharacterEncoding("utf-8");
                        if ("title".equals(fi.getFieldName())) {
                            news.setTitle(fi.getString("utf-8"));
                            System.out.println(fi.getString("utf-8"));                    
                        } else if ("time".equals(fi.getFieldName())) {
                            news.setTime(fi.getString("utf-8"));
                            System.out.println(fi.getString("utf-8"));                   
                        } else if ("focus".equals(fi.getFieldName())) {
                            int focus = 0;
                            if ("on".equals(fi.getString("utf-8"))) {
    focus
    = 1; } news.setFocus(focus); System.out.println(focus); } } else { // 得到文件的完整路径 Format format = new SimpleDateFormat("yyyyMMdd_HHmmss"); Date date = new Date(); String path = fi.getName(); // 得到去除路径的文件名 String filename = path .substring(path.lastIndexOf("\") + 1);
    //为了避免下载文件时出现中文传输参数乱码,故将文件存储名设置为年月日+加时分秒+3位随机数,当上传一个文件时完全可以不使用随机数, String type
    = null; if (!"".equals(filename) && filename != null) {//也可以添加判断条件:&&fi.getSize()!=0 int b = (int) (Math.random() * 1000); type = filename.substring(filename.length() - 4, filename.length()); filename = format.format(date) + b + type; System.out.println(filename); // 将文件保存在Web目录的upload文件夹中 if ("pic_1".equals(fi.getFieldName())) { news.setPic_1(fi.getName()); news.setPic_1path(filename);//path为文件名被重新定义后的名称,需要被存入数据库中 System.out.println("11111" + fi.getName()); } if ("pic_2".equals(fi.getFieldName())) { news.setPic_2(fi.getName()); news.setPic_2path(filename); System.out.println("22222" + fi.getName()); } if ("pic_3".equals(fi.getFieldName())) { news.setPic_3(fi.getName()); news.setPic_3path(filename); System.out.println("33333" + fi.getName()); } fi.write(new File(uploadPath, filename)); }} } News.addNews(news);//此处为javabean中定义的添加记录的方法,用于将信息存入数据库 } catch (FileUploadException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } request.getRequestDispatcher("QueryNewsByConditionServlet.do").forward( request, response);

    下面是jsp页面部分代码(仅供参考):

    <form name="newsF" method="post" action="../servlet/addNewsServlet" enctype="multipart/form-data">
                                    <table align="center" cellpadding="5" cellspacing="0" class="tab"
                                        id="js_table1">
                                        <tr >
                                            <td class="TableData">标题:</td>
                                            <td class="input">
                                                <input type="text" name="title" size="40"/>
                                            </td>
                                        </tr>                                  
                                        <tr>
                                            <td class="TableData">发布时间:</td>
                                            <td class="input">
                                                <input type="text"
                                                    onFocus="WdatePicker({isShowClear:false,readOnly:true,dateFmt:'yyyy-MM-dd HH:mm:ss'})"
                                                    size="20" name="time" />
                                            
                                            </td>
                                        </tr>
                                        <tr ><td colspan="2"> <input type="checkbox" name="focus" /><font color="#E60000" face="仿宋" >将此新闻设置为焦点并在在首页显示</font></td>
                                        </tr>                                    
                                        <tr>
                                        <td>添加图片1:</td>
                                        <td><input type="file" name="pic_1"/>
                                        </td>
                                        </tr>
                                        <tr>
                                        <td>添加图片2:</td>
                                        <td><input type="file" name="pic_2"/> 
                                        </td>
                                        </tr>
                                        <tr>
                                        <td>添加图片3:</td>
                                        <td><input type="file" name="pic_3"/>
                                        </td>
                                        </tr>
  • 相关阅读:
    SpringMVC源码分析--HandlerMappings
    你真的懂wait、notify和notifyAll吗
    深入理解DefaultMessageListenerContainer
    起步
    ZOJ 3827 Information Entropy (2014牡丹江区域赛)
    Spring简化配置
    对于一个IE8兼容性问题的反思
    xcode7.1.1不能真机调试ios9.2系统设备的解决方法
    CSS3怎样实现超出指定文本以省略号显示效果
    网易2016年研发project师编程题(2)
  • 原文地址:https://www.cnblogs.com/mecca/p/3310629.html
Copyright © 2020-2023  润新知