如何在spring mvc中使用multipart / form-data

时间:2016-09-08 09:24:52

标签: java spring spring-mvc multipartform-data

@POST
@Consumes(MediaType.MULTIPART_FORM_DATA) 
@Path("/uploadFile")
public POSResponse singleSave(@FormDataParam("file") MultipartFile file) {
        Response response = new Response();
        String fileName = null;
        if (!file.isEmpty()) {
            try {
                fileName = file.getOriginalFilename();
                byte[] bytes = file.getBytes();
                BufferedOutputStream buffStream = new BufferedOutputStream(new FileOutputStream(new File("d:\\" + fileName)));
                buffStream.write(bytes);
                buffStream.close();
            } catch (Exception e) {
            }
        } else {

        }
        return response;
}

当我点击这个api然后我收到了错误" 415:不支持的媒体类型" 这意味着不支持header.I想要将文件从ARC加载到控制器。

和我的控制台:

  

Java类org.springframework.web.multipart.MultipartFile的消息体阅读器,以及Java类型接口org.springframework.web.multipart.MultipartFile和MIME媒体类型multipart / form-data; boundary = ----找不到WebKitFormBoundaryP1d7Atv9FO9wU301。       与MIME媒体类型兼容的已注册邮件正文阅读器是:        / - >         com.sun.jersey.core.impl.provider.entity.FormProvider         com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider         com.sun.jersey.core.impl.provider.entity.StringProvider         com.sun.jersey.core.impl.provider.entity.ByteArrayProvider         com.sun.jersey.core.impl.provider.entity.FileProvider         com.sun.jersey.core.impl.provider.entity.InputStreamProvider         com.sun.jersey.core.impl.provider.entity.DataSourceProvider

我在pom.xml文件中添加了一些maven依赖。

我的pom文件:

<!-- multipart file dependency -->

    <dependency>
        <groupId>org.jvnet</groupId>
        <artifactId>mimepull</artifactId>
        <version>1.6</version>
    </dependency>

    <dependency>
        <groupId>org.jvnet.mimepull</groupId>
        <artifactId>mimepull</artifactId>
        <version>1.9.5</version>
    </dependency>

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>1.17.1</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-multipart</artifactId>
        <version>1.17.1</version>
    </dependency>

1 个答案:

答案 0 :(得分:0)

我不确定您编写的代码,但我是如何在spring-mvc中完成的

使用案例:上传图片

  1. 在我们的Web应用程序的上下文配置文件中添加bean定义 CommonsMultipartResolver的(DispatcherServlet-context.xml),
    如下:

    <bean   id="multipartResolver"  
            class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property   name="maxUploadSize"    value="10240000"/>
    

  2. 向pom.xml添加依赖项 输入Group Id作为commons-fileupload,Artifact Id作为commons-fileupload,Version作为1.2.2;选择Scope作为编译;然后单击“确定”按钮。

  3. 同样,再添加一个Group Id依赖项作为org.apache.commons,Artifact Id as commons-io,Version as 1.3.2;选择Scope作为编译;单击确定 按钮;并保存pom.xml文件

  4. 添加对
    的引用 org.springframework.web.multipart.MultipartFile java类中相应的setter和getter将文件定义为属性,如下所示:

    @JsonIgnore
    private MultipartFile productImage;
    @XmlTransient
    public MultipartFile getProductImage() {
        return productImage;
    }
    
    public void setProductImage(MultipartFile productImage) {
        this.productImage = productImage;
    }
    
  5. 在要上传文件的jsp中,使用以下标记

  6. 将表单标签中的enctype属性设置为multipart / form-data为 在jsp中跟随

  7. 注意:我使用的是spring form标记库

    <form:form  modelAttribute="newProduct" class="form-horizontal" enctype="multipart/form-data">
    
    1. 将以下代码添加到控制器

       public String processAddNewProductForm(@ModelAttribute("newProduct") @Valid Product productToBeAdded,  BindingResult result, HttpServletRequest request) {
              if(result.hasErrors())  {
                  return  "addProduct";
              }
      
      
              MultipartFile productImage = productToBeAdded.getProductImage();
      
              String rootDirectory = request.getSession().getServletContext().getRealPath("/");
      
                  if (productImage!=null && !productImage.isEmpty()) {
                     try {
                      productImage.transferTo(new File(rootDirectory+"resources\\images\\"+productToBeAdded.getProductId() + ".png"));
                     } catch (Exception e) {
                      throw new RuntimeException("Product Image saving failed", e);
                 }
                 }
      
      
      
              productService.addProduct(productToBeAdded);
              return "redirect:/products";
          }
      
    2. ****先决条件****

      弹簧项目已正确设置,接线已完成

      很少的注释和代码行特定于我的项目,可能并不完全相关