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

如何在spring mvc中使用多部分/表单数据

沙小白
2023-03-14
@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:Unsupported Media type”,这意味着不受支持的头。我想将文件从ARC加载到控制器。

我在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个答案

秦俊友
2023-03-14

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

用例:上载图像

>

  • 在我们的web应用程序的上下文配置文件(dispatcherServlet-context.xml)中为CommonsMultipartResolver添加一个bean定义,
    如下所示:

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

    向pom.xml添加依赖项,输入组Id为commons-fileupload,工件Id为commons-fileupload,版本为1.2.2;选择Scope为Compile;然后单击OK按钮。

    类似地,再添加一个组Id依赖项为org.apache.commons,工件Id为commons-io,版本为1.3.2;选择Scope为Compile;单击OK按钮;并保存pom.xml文件

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

    @JsonIgnore
    private MultipartFile productImage;
    @XmlTransient
    public MultipartFile getProductImage() {
        return productImage;
    }
    
    public void setProductImage(MultipartFile productImage) {
        this.productImage = productImage;
    }
    

    在要上载文件的jsp中,使用以下标记

    jsp中将form标记中的enctype属性设置为multipart/form-data,如下所示

    <form:form  modelAttribute="newProduct" class="form-horizontal" enctype="multipart/form-data">
    
     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";
        }
    

    spring project已正确设置,布线已完成

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

  •  类似资料:
    • 我正在尝试编写一个SpringMVC方法,它可以接收多部分/表单或传输编码的分块文件上传。我可以编写一个单独的方法来处理每种类型,但我希望使用相同的方法,以便使用相同的REST POST uri,例如: 以下是我迄今为止最好的尝试: 使用上述方法,我可以上传一个多部分文件,但如果我上传一个分块文件,我会从spring得到一个异常,它说: 如果我删除MultipartFile请求参数,它非常适合分块

    • 我已经创建了一个使用“多部分/表单数据”的控制器 采样器请求对象 现在,我将尝试使用模拟MVC测试它,但我不知道如何将“多部分/表单数据”作为内容传递。我看到很多使用JSON的示例,但没有使用多部分/表单数据 有没有一种方法可以完成我的请求与多部分/form_data?理想情况下,它需要在MockHttpServletRequest的主体中

    • 我需要实现一个RESTendpoint,它接收多部分/表单数据 我使用 -Spring Boot -Kotlin -Spring MVC 当我收到一个请求时,就会出现一个错误: 内容类型'multipart/form-data';boundary=----------------------------------------------------------------------------

    • 问题内容: 我有一个带有方法的控制器方法,该方法接收multipart / form-data: 我想使用进行测试。不幸的是创建了一个具有方法的实例: 编辑: 当然,我 不能 创建自己的实现,例如 因为具有包本地构造函数。 但是我想知道是否还有其他更方便的 方法?可以这样做吗,可能是我错过了一些现有的类或方法吗? 问题答案: 是的,有一种方法,而且也很简单! 我自己也遇到了同样的问题。尽管我不满意

    • 您好,我想向邮递员发送一个带有json的正文和一个formd数据中的图像。。。 我将表单数据图像保存在s3桶中,实体具有作为图像链接的字符串属性 这里是我的spring boot控制器 我已经用@RequestParam和@RequestPart尝试了多部分文件。。。我收到以下错误: "不支持内容类型'multipart/form-data;边界=-------------------------

    • 我很难用PHP cURL发布到API。我觉得我已经尝试了每种组合。我的脚本正在连接,但问题在负载范围内。 这是根据文档所需的请求。 --85b890d4-4faf-4261-bcbb-187c4dddcbc6内容类型:application/vnd.emc。ax json;charset=utf-8内容配置:表单数据;名称=数据 --85b890d4-4faf-4261-bcb-187c4dddc