当前位置: 首页 > 知识库问答 >
问题:

Spring mvc使用enctype="Multipart/form-data"模型时,控制器中的属性值等于null

廉志强
2023-03-14

我使用Spring mvc我想uplod图像到jsp表单,所以我添加enctype="Multipart/form-data"到表单标签,但当我添加此,模型属性值等于null在控制器

这是我在jsp页面的表单:

 <form:form action="saveContact" method="post" modelAttribute="Contacting"   id="container" enctype="multipart/form-data">

这是控制器中函数的标题:

     @RequestMapping(value = "/saveContact", method = RequestMethod.POST)
     public ModelAndView saveContact(@ModelAttribute ("Contacting") Contacting Contacting,ModelAndView modelndView,HttpServletRequest request ,HttpServletResponse response
) throws Exception {............}

@modeldattribute(“Contacting”)Contacting Contacting所有值均为null。当我从表单标签中删除enctype=“multipart/form data”时,它工作正常,但我无法上传图像

这是uplaud函数:public void uplaodImages(字符串url,HttpServletRequest){

     // configures upload settings
     DiskFileItemFactory factory = new DiskFileItemFactory();
     factory.setSizeThreshold(THRESHOLD_SIZE);

     ServletFileUpload upload = new ServletFileUpload(factory);
     upload.setFileSizeMax(MAX_FILE_SIZE);
     upload.setSizeMax(MAX_REQUEST_SIZE);

     String uuidValue = "";
     FileItem itemFile = null;

     try {
         // parses the request's content to extract file data
         List formItems = upload.parseRequest(request);
         Iterator iter = formItems.iterator();

         // iterates over form's fields to get UUID Value
         while (iter.hasNext()) {
             FileItem item = (FileItem) iter.next();
             if (item.isFormField()) {
                 if (item.getFieldName().equalsIgnoreCase(UUID_STRING)) {
                     uuidValue = item.getString();
                 }
             }
             // processes only fields that are not form fields
             if (!item.isFormField()) {
                 itemFile = item;
             }
         }

         if (itemFile != null) {
             // get item inputstream to upload file into s3 aws

             BasicAWSCredentials awsCredentials = new BasicAWSCredentials(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY);

             AmazonS3 s3client = new AmazonS3Client(awsCredentials);
             try {

                 ObjectMetadata om = new ObjectMetadata();
                 om.setContentLength(itemFile.getSize());
                 om.setContentType("image/png");

                 String ext = FilenameUtils.getExtension(itemFile.getName());
                 String keyName = uuidValue + '.' + ext;

                // s3client.putObject(new PutObjectRequest(S3_BUCKET_NAME,"99/after/img", itemFile,st om));
                // s3client.setObjectAcl(S3_BUCKET_NAME, "99/after/img", CannedAccessControlList.PublicRead);
                 TransferManager tm = new TransferManager(new ProfileCredentialsProvider());        
                System.out.println("Hello");
                // TransferManager processes all transfers asynchronously, 
                // so this call will return immediately.
                Upload upload1 = tm.upload(
                        S3_BUCKET_NAME, url, itemFile.getInputStream(),om);
                System.out.println("Hello2");

                try {
                    // Or you can block and wait for the upload to finish
                    upload1.waitForCompletion();
                    System.out.println("Upload complete.");
                } catch (AmazonClientException amazonClientException) {
                    System.out.println("Unable to upload file, upload was aborted.");
                    amazonClientException.printStackTrace();
                }


             } catch (AmazonServiceException ase) {
                // LOGGER.error(uuidValue + ":error:" + ase.getMessage());

             } catch (AmazonClientException ace) {
                 //LOGGER.error(uuidValue + ":error:" + ace.getMessage());
             }


         } else {
             //LOGGER.error(uuidValue + ":error:" + "No Upload file");
          System.out.println("No Upload file");
         }

     } catch (Exception ex) {
         //LOGGER.error(uuidValue + ":" + ":error: " + ex.getMessage());
      System.out.println(ex.getMessage());
     }
     //LOGGER.info(uuidValue + ":Upload done");
     System.out.println("Upload done");

}

共有1个答案

闾丘玮
2023-03-14
@RequestMapping(value = "/form.html", method = RequestMethod.POST)
public String handleFormUpload(@RequestParam("name") String name,
    @RequestParam("file") MultipartFile  file) throws Exception {
}
 类似资料:
  • 问题内容: HTML表单是什么意思,什么时候应该使用它? 问题答案: 发出POST请求时,必须以某种方式对构成请求主体的数据进行编码。 HTML表单提供了三种编码方法。 (默认) 正在进行添加的工作,但已被放弃。 (使用HTML表单提交以外的其他方式生成的HTTP请求也可以使用其他编码。JSON是用于Web服务的常见格式,有些仍然使用SOAP。) 格式的细节对大多数开发人员而言并不重要。要点是:

  • 问题内容: JSF: 1.2 服务器: Weblogic 我正在尝试实现多个文件上传。由于需要支持IE7,因此无法使用HTML5输入文件。因此,我计划添加一个按钮,单击该按钮将在页面中添加一个输入文件。 首先,我开始使用ADF Faces工作。但这没有用。那表现出意想不到的方式。 我还尝试了Tomahawk的文件上传组件,但是问题在于该组件,从后端添加了新文件上传后,以前创建的文件上传字段为空。不

  • 问题内容: 我想在JavaScript中使用XMLHttpRequest来发布包含文件类型输入元素的表单,以便避免页面刷新并返回有用的XML。 我可以使用JavaScript将表单上的目标属性设置为MSIE的iframe或Mozilla的对象,而无需刷新页面即可提交表单,但这有两个问题。较小的问题是目标与W3C不兼容(这就是为什么我在JavaScript中而不是在XHTML中设置目标)。主要问题是

  • 问题内容: 我正在尝试使用go将图像从计算机上传到网站。通常,我使用bash脚本将文件和密钥发送到服务器: 它工作正常,但我正在尝试将此请求转换为我的golang程序。 http://matt.aimonetti.net/posts/2013/07/01/golang-multipart-file-upload- example/ 我尝试了此链接和许多其他链接,但是,对于我尝试的每个代码,服务器的

  • 我需要将照片和访问令牌传递给后端REST服务。内容类型 is Multipart/form-data我创建了html表单和操作是esb的endpoint,我已经跟踪了通往ESB[A]和从ESB[B]出去的流量。这似乎幻灯片上的变化,我不知道解决这个问题。当我将捕获的流量发送到ESB[A]时,后端服务会接受它。但是由ESB[B]输出的流量不被后端接受。表示不识别边界中的值。上面写着“价值观是空的”

  • 问题内容: 我正在尝试使用伪装完成多部分文件上传,但似乎在任何地方都找不到很好的示例。我本质上希望HTTP请求类似于以下内容: 甚至… 我是否需要手动构建请求主体,包括生成多部分边界?考虑到此客户端可以执行的其他所有操作,这似乎有点过头了。 问题答案: 不,你没有。您只需要定义一种代理接口方法,将content-type指定为:multipart / form- data和其他信息,例如远程API