jquery formdata 在 express req.files 中返回 null

Posted

技术标签:

【中文标题】jquery formdata 在 express req.files 中返回 null【英文标题】:jquery formdata returns null in express req.files 【发布时间】:2021-10-03 19:03:34 【问题描述】:

我在客户端使用 Bootstrap/jquery。在服务器端,我使用 node.js 并表达 形式如下:

<form id="signupform" action="">
            <h2>Sign Up</h2>
            <p>Please fill in this form to create an account!</p>
            <hr>
            <div class="form-group">
                <input type="text" class="form-control" id="username" placeholder="Username" required="required">
            </div>
            <div class="form-group">
                <input type="email" class="form-control" id="email" placeholder="Email" required="required">
            </div>
            <div class="form-group">
                <input type="number" class="form-control" id="contact" placeholder="Contact" required="required">
            </div>
            <div class="form-group">
                <input type="password" class="form-control" id="password" placeholder="Password" required="required">
            </div>
            <div class="custom-file">
                <label class="custom-file-label" for="cover">Profile Picture</label>
                <input type="file" class="custom-file-input" id="cover">
                
            </div>
            <div class="form-group">
                <button type="submit" class="btn btn-primary btn-lg" id="sign-up">Sign Up</button>
            </div>
        </form>

我的jquery如下:

$(document).ready(function()
    $("#sign-up").click(function(event)
        event.preventDefault();
        var formData = new FormData();
        formData.append("username",$("#username").val())
        formData.append("email",$("#email").val())
        formData.append("contact",$("#contact").val())
        formData.append("password",$("#password").val())
        formData.append("cover",$("#cover")[0].files)
        $.ajax(
            url: "http://localhost:3000/users/",
            type: 'POST',
            data: formData,
            success: function (data) 
                alert(data)
            ,
            cache: false,
            contentType: false,
            processData: false
        );
    );
);

在服务器端,当我查看传入请求时,我看到:

 body: 
    username: 'Sree',
    email: 'example@gmail.com',
    contact: '1',
    password: '1',
    cover: '[object FileList]'
  ,

在服务器端,我使用的是 express-fileupload,但图像是在正文而不是 req.files 中发送的。如何将formData的文件发送到req.files而不是body?

【问题讨论】:

查看此链接 - makitweb.com/how-to-upload-image-file-using-ajax-and-jquery。您必须在表单中使用 enctype="multipart/form-data" 并检查给定链接中的 jquery 代码。 formData.append("cover",$("#signupform")[4])中的[4]有什么期待?我建议formData.append("cover",$("#cover")[0].files) 其中[0] 是获取jQuery 对象内的DOM 元素,.files 是fileList。 您可以这样做var formData = new FormData(document.getElementById('signupform')); 而不是手动获取每个输入。从输入中删除 id 并改用 name 【参考方案1】:

您应该将 File 对象传递给 append(),要访问文件对象,请使用 prop 方法访问 FileList 并获取第一个索引处的项目

formData.append("cover", $("#cover").prop('files')[0])

【讨论】:

我认为元素应该是 $('#cover") 但它有效

以上是关于jquery formdata 在 express req.files 中返回 null的主要内容,如果未能解决你的问题,请参考以下文章

通过jQuery Ajax使用FormData对象上传文件

通过jQuery Ajax使用FormData对象上传文件

jquery使用FormData提交数据

jquery 怎么获取formdata数据

在 Wordpress 中使用 jQuery 发布数据成功,但使用 FormData 失败

通过jQuery Ajax使用FormData对象上传文件