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

Spring Boot多部分上传获取空文件对象

孙福
2023-03-14
    null

下面是映射。

@RequestMapping(value = {"/api/upload"}, method = RequestMethod.POST)
public ResponseEntity<Map<String, Integer>> upload(@Valid FileBucket fileBucket, BindingResult result) throws IOException {
        Session session = sessionFactory.openSession();
        User user = (User) session.load(User.class, getUserId());

        Map<String, Integer> model = new HashMap<String, Integer>();
        if (result.hasErrors()) {
            System.out.println("validation errors");
            System.out.println(result);
            session.close();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        } else {
            int documentId = saveDocument(fileBucket, user);
            model.put("documentId", documentId);
            session.close();
            return new ResponseEntity<Map<String, Integer>>(model, HttpStatus.OK);
        }
}

FileBucket对象

public class FileBucketConversation {

    private MultipartFile file;

    public MultipartFile getFile() {
        return file;
    }

    public void setFile(MultipartFile file) {
        this.file = file;
    }
}

我尝试了几种实现文件上传的方法,仍然有同样的情况。

@Bean(name = "multipartResolver")
public StandardServletMultipartResolver resolver() {
    return new StandardServletMultipartResolver();
}
@Bean(name="multipartResolver")
public CommonsMultipartResolver multipartResolver () {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();
    resolver.setMaxUploadSize(MAX_FILE_SIZE);
    return resolver;
}
@Bean
@Order(0)
public MultipartFilter multipartFile() {
    MultipartFilter multipartFilter = new MultipartFilter();
    multipartFilter.setMultipartResolverBeanName("multipartResolver");
    return multipartFilter;
}
spring.http.multipart.enabled=true
spring.http.multipart.max-file-size=20Mb
spring.http.multipart.max-request-size=20Mb

谢谢你。

共有1个答案

萧宏峻
2023-03-14

我也有同样的问题,这是我的解决方案:

在application.yml中:

spring:
  http:
    multipart:
      enabled: false

在配置中:

import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
...

@Bean
public MultipartResolver multipartResolver() {
    return new CommonsMultipartResolver();
}
@PostMapping(value = "api/upload", consumes = "multipart/form-data") 
public void enablePurchase(@RequestHeader HttpHeaders headers,
                           FileBucketConversation fileBucketConversation) {
...
}
/* DON'T USE THIS:
let boundary = "ABDCE";
headers.append("Content-type", "multipart/form-data;boundary=" + boundary);
headers.append("enctype", "multipart/form-data;boundary=" + boundary);
headers.append("boundary", boundary);
*/
 类似资料:
  • 我试图创建一个页面,用户可以张贴图像及其细节。现在,当我测试来自postman的spring boot服务时,我能够成功地在服务中获取文件。当我试图从angular5中做同样的事情时,多部分文件在服务中没有被识别,并且总是得到空数组。 我的角服务代码如下 } 我已经尝试添加标头,如multipart/form-data,并将其设置为un定义。无论哪种方式,我都收到了错误。在发布到这里之前,我已经广

  • 我正在Spring controller中努力实现多部分文件上传。我读过很多问题,谷歌,但似乎什么都不管用。 我明白了 我的BE控制器: FE,angularJS: HTML: 还有应用程序。属性包括: 更新: 当我按照@Byeon0gam的建议从我的控制器中删除@RequestParam时,我不再会遇到这个错误,但是我的文件在控制器中是空的。虽然在FE服务中,如我所见,它不是空的:

  • 我正在使用这个音频记录和视频文件,它是工作的,但我想用OKHTTP取代它。我没弄明白。有人能帮我一下吗?

  • 我正在使用Spring Boot 1.2。我想上传一个原始二进制文件到控制器。文件大小可能很大,因此我不想将整个请求保存在内存中,而是流式传输文件,事实上,文件是在传输开始时生成的,因此客户端甚至不知道文件的大小。我在这里看到了一个如何使用多部分编码的文件上传进行类似操作的示例。然而,我不想要一个多部分编码的上传,只是一个原始的字节流。我似乎找不到在Spring处理这个用例的方法。

  • 编写代理文件上载的应用程序。我正在使用CURL发布文件,但有一些问题。发布到脚本是正常的,它从脚本发布到下一个服务器就是问题所在。我一直从服务器收到此错误: “请求被拒绝,因为没有找到多部分边界” 这是我的代码: 我在网上读到的所有内容都表明,这应该可行,而且设置标题内容类型也是不必要的,但当我删除内容类型时,我会出现以下错误: 请求不包含多部分/表单数据或多部分/混合流,内容类型标头为null

  • 在Android中使用OKHTTP以多部分方式上传单个大文件(更具体地说,上传到s3)时,我有什么选择?