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

Spring Boot和jQuery文件上载:不支持的媒体类型

程磊
2023-03-14

我试图用spring Boot1.2.0REST控制器和jQuery Ajax上传一个csv文件。当我发送post请求时,我不断得到415:不受支持的媒体类型错误。下面是我的表格:

<form id="upload_form">
    <div id="message">        

    </div>

    <br/>
    <div class="row" id="upload-file-div" style="display: none">
        <div class='col-sm-3'>
            <label>Select File</label>
            <input type="file" name="file">
        </div>

         <div class='col-sm-3'>
             <input type="button" id="file-upload" class="btn btn-primary" value="Upload" onclick="uploadFile()"/>           
        </div>
    </div>
</form>
function uploadFile(){
    var response = api.uploadCSV($("#upload_form"));
    if(response.status === 'OK'){
        $("#message").css('color', 'green');
    }else{
        $("#message").css('color', 'red');
    }
    $("#message").html(response.message);
}
upload: function (url, form, ignoreSuccess) {
    var response = null;
    if (!this.validate(form)) {
        var array = form.serializeArray();
        alert(array);
        var formData = new FormData(form);
        console.warn(formData);
        $.ajax({
            type: "POST",
            url: API_PROXY + url,
            data: formData,
            cache: false,
            contentType: false,
            processData: false,
            async: false,
            beforeSend: function (request) {
                if (api.getSession() !== null) {
                    request.setRequestHeader("Authorization", "Bearer " + api.getSession().bearer);
                }
            },
            success: function () {}

        }).done(function (msg) {
            response = msg;
        });

    }
    return response;
}
@RequestMapping(consumes = "multipart/form-data", method = RequestMethod.POST, 
        value = "/upload/twitter", produces = MediaType.APPLICATION_JSON_VALUE)
public Response<String> uploadCsv(CsvUploadModel form) {

//代码

}

我在Spring Boot类中注释了MultipartConfigElement和MultipartResolver。我使用的是spring Boot1.2.0。当我用PostMan(chrome扩展)发送post请求时,它按预期工作。但是,当我尝试上面的jquery代码时,它不断抛出不受支持的媒体类型错误。

    null

有谁能帮我一下吗?提前道谢。

共有1个答案

冷正信
2023-03-14

您可以在formdata中追加文件输入;需要进行以下更改:

这个:

<input type="file" name="file">

应该是:

<input type="file" name="file" id="file">
var formData = new FormData(form);
    console.warn(formData);
    $.ajax({
        type: "POST",
        url: API_PROXY + url,
        data: formData,

应该是:

var formData = new FormData();
formData.add("file",$('#file')[0].files)
    $.ajax({
        type: "POST",
        url: API_PROXY + url,
        data: formData,

或:

var formData = new FormData(form[0]);
$.ajax({
        type: "POST",
        url: API_PROXY + url,
        data: formData,    
 类似资料:
  • 我的理解是我需要泽西-媒体-多部分依赖 当我尝试发出post请求时,我得到一个415不受支持的媒体类型错误,我不确定为什么。它被设置为消耗MULTIPART_FORM_DATA,参数是一个multipartfile。 编辑我添加了如下配置, 现在我得到了 这里是我的Spring Boot类,它包含附加配置

  • 我试图在安全上下文中对spring rest web服务API执行ajax跨域post调用。在Jquery中,我无法设置contentType属性,因为安全上下文有问题。但是如果没有来自spring的contentType,我会收到以下响应:415(不支持的媒体类型) Spring控制器: jQuery: 有一种方法可以在Spring上禁用contentType检查?我的所有数据都是json,我希

  • 我知道已经有一个类似的问题,但它没有解决上述错误。 这是我在API控制器中的PUT操作,在中运行良好: 以下是我的网页上的代码: HTML 打字稿 我的服务是: 我还使用了尝试上述问题的答案,我将我的文件附加到中,但不幸的是,同样的错误。如果媒体类型中没有任何设置,如何修复此问题?

  • 我在使用Spring的reactive框架处理文件上传时遇到了一些问题。我想我正在跟踪文档,但无法摆脱/问题。 似乎Spring在将这些转换为时遇到了问题..?我卡住了--任何帮助都是可取的!

  • 我工作在一个。Net Core Web Api和Angular应用程序。我创建了一个控制器,它将图像链接到数据库中的一个项目: 它在Postman中运行良好,但当我想使用控制器时,我得到一个错误: Headers:HttpHeaders{normalizedNames:Map(0),lazyUpdate:null,Headers:Map(0)}消息:“的Http失败响应https://localh

  • 问题内容: 自数小时以来,我一直在尝试纠正http错误,但它仍显示不支持的页面。我在邮递员中添加标题。 这是我的Java代码 这是我的档案 问题答案: 通过和如何在响应流和请求流之间对对象进行序列化和反序列化。 将会发生的是,将从提供者的注册表中进行搜索,以查找可以处理的媒体类型。如果找不到,则Jersey无法处理该请求,并将发送415不支持的媒体类型。通常,你还应该在服务器端记录一个异常。不知道