Struts2接收formData类型的ajax文件上传,属性可以传过去,文件就报错。

接收文件就报错
图片描述

接收普通属性没有问题

clipboard.png

clipboard.png

报错:

clipboard.png

public String save_category() {

        System.out.println("name:" + category.getCategory_name());
        System.out.println("rank:" + category.getCategory_rank());
        System.out.println("show:" + category.getCategory_show());
        System.out.println("news:" + category.getCategory_news());
        System.out.println("father:" + category.getCategory_father());

        /*
         * 
         */
        // http_response.setCharacterEncoding("utf-8");
        // 1、创建一个DiskFileItemFactory工厂
        DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
        // 2、创建一个文件上传解析器
        ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
        // 解决上传文件名的中文乱码
        // servletFileUpload.setHeaderEncoding("UTF-8");
        System.out.println("asdqqqqqasdasds");
        try {
            // 1. 得到 FileItem 的集合 items
            List<FileItem> list_fileItems = servletFileUpload.parseRequest(http_request);

            // 2. 遍历 items:
            for (FileItem fileItem : list_fileItems) {
                // 若是一个一般的表单域, 打印信息
                if (fileItem.isFormField()) {
                    System.out.println(fileItem.getFieldName());
                    switch (fileItem.getFieldName()) {
                    case "category.category_name": {
                        break;
                    }
                    }
                    System.out.println(fileItem.getFieldName() + ": " + fileItem.getString("utf-8"));
                }
                // 若是文件域
                else {

                    String fileName = fileItem.getName();
                    long sizeInBytes = fileItem.getSize();
                    System.out.println("原文件名fileName:" + fileName);
                    System.out.println("sizeInBytes:" + sizeInBytes);

                    if (sizeInBytes != 0) {

                        String[] fileNameArray = fileName.split("\\.");

                        System.out.println("fileNameArray.length:" + fileNameArray.length);
                        System.out.println("fileNameArray[0]:" + fileNameArray[0]);
                        System.out.println("fileNameArray[1]:" + fileNameArray[1]);

                        category.setCategory_img(uuid.getUuid() + "." + fileNameArray[1]);
                        System.out.println("改名后post_img:" + category.getCategory_img());

                        InputStream inputStream = fileItem.getInputStream();
                        byte[] buffer = new byte[1024];
                        int lenth = 0;

                        String filePath = "F:\\xxyjsjgcxy_img\\snews_category\\" + category.getCategory_img();// 文件最终上传的位置
                        System.out.println(filePath);
                        OutputStream outputStream = new FileOutputStream(filePath);

                        while ((lenth = inputStream.read(buffer)) != -1) {
                            outputStream.write(buffer, 0, lenth);
                        }

                        outputStream.close();
                        inputStream.close();

                    } else {
                        category.setCategory_img(null);
                    }

                }
            }

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

        }

        /*
         * 处理其他数据
         */
        // page = "page_list_category";
        // ActionContext.getContext().getValueStack().push(page);
        return "save_category";

    }

调试一下午无果,望各位指点一二

阅读 6.1k
1 个回答

formData.append("uploadfile",$("#fileInputID")[0].files[0]);
不知道是不是你这边js的问题额,可以看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进