通过 REST 服务上传文件时如何解决 400() 错误

Posted

技术标签:

【中文标题】通过 REST 服务上传文件时如何解决 400() 错误【英文标题】:How to resolve 400() error when file uploading via REST service 【发布时间】:2018-03-31 03:32:55 【问题描述】:

我有一个程序(Spring Boot),它使用 REST 服务将文件上传到服务器或任何其他给定位置。但是当我使用相同的服务时,发生了以下错误,下面是问题。

通过 REST 服务上传文件时,我收到 400() 错误,没有任何描述。此应用是 Spring Boot 应用,它使用 java-script 前端通过实现的 rest 服务上传和下载文件。

帮助解决这个问题。感谢您的帮助。谢谢。

错误是:

下面是代码: JS:

document.getElementById('import2').onclick = function () 

var files = document.getElementById('selectFiles').files;
console.log(files);
if (files.length <= 0) 
    return false;


//serverUploaded = true;

var form_data = new FormData(files.item(0));
//from new NLP
$.ajax(
    type: "POST",
    url: "http://localhost:8080/gsta/upload",
    processData: false,
    contentType: false,
    async: false,
    cache: false,
    data: form_data,
    success: function (result) 
        //alert(JSON.stringify(result));
        //$("#out_lexalytics").html(JSON.stringify(result));
        if (result) 
            if(result.statusCode == 200)
            
                serverUploaded = true;
            
        
    
);

REST 服务:

@PostMapping("/upload")
// If not @RestController, uncomment this
@ResponseBody
public ResponseEntity<?> uploadFile(@RequestParam("data") MultipartFile uploadfile) 

    logger.debug("Single file upload!");

    if (uploadfile != null && uploadfile.isEmpty()) 
        return new ResponseEntity("please select a file!", HttpStatus.OK);
    

    try 

        saveUploadedFiles(Arrays.asList(uploadfile));

     catch (IOException e) 
        e.printStackTrace();
        return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
    

    return new ResponseEntity("Successfully uploaded - " + uploadfile.getOriginalFilename(), new HttpHeaders(), HttpStatus.OK);


【问题讨论】:

【参考方案1】:

我用这样的邮递员在本地环境中创建了相同的场景;

服务器端稍作改动 (@RequestMapping(value = "/upload", method = RequestMethod.POST));

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public ResponseEntity<?> uploadFile(@RequestParam("data") MultipartFile uploadfile) 
    logger.debug("Single file upload!");
    if (uploadfile != null && uploadfile.isEmpty()) 
        return new ResponseEntity("please select a file!", HttpStatus.OK);
    
    return new ResponseEntity("Successfully uploaded - " + uploadfile.getOriginalFilename(), new HttpHeaders(), HttpStatus.OK);

有效。

【讨论】:

你用postman rest客户端是对的,但是你试过ajax调用吗? 好的,检查一下:link【参考方案2】:

我的假设:你的方法 saveUploadedFiles 抛出一个 IOException。

当您收到 400 Bad Request 作为响应时,我认为您应该调试您的

catch (IOException e) e.printStackTrace(); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

阻止以找出导致 IOException 的原因。

【讨论】:

我已经调试并尝试过,请求甚至没有到达方法。 然后在这里查看这个答案:***.com/a/21045034/4763309

以上是关于通过 REST 服务上传文件时如何解决 400() 错误的主要内容,如果未能解决你的问题,请参考以下文章

如何从 REST API 传递类别属性值

如何使用REST API将文件存储卷安装到azure容器实例

idea 内置tomcat jersey 跨服务器 上传文件报400错误

如何使用 REST Web 服务上传包含元数据的文件?

通过 multipart/form-data 上传 Angular2 文件,400 错误

如何在rest wcf服务中上传pdf文件和其他字符串参数