codeigniter 拖放区:同时提交表单数据和拖放区

brqmpdu1  于 2022-12-07  发布在  其他
关注(0)|答案(4)|浏览(301)

我知道有一些这样的问题,但他们没有确切地回答问题。
这就是我需要的,
1.使用Dropzone上载文件
1.将表单数据和上传的图像路径保存到数据库

问题是,我如何同时发送表单数据和dropzone文件,就像下面的官方文档文章一样。

我遵循此Dropzone官方文档Combine normal form with Dropzone
我尝试了这篇文章,它工作了。我可以同时获得表单数据和文件。但在这篇文章中,整个表单是一个Dropzone。我只需要用div创建一个Dropzone
然后我尝试了这个方法,

  • 首先上载文件,然后获取上载文件路径作为响应
  • 通过将value设置为从响应接收的文件路径,创建隐藏的input
  • 提交表单

但问题是,如果我使用这种方法,我必须先上传文件。如果一个请求被打破时,我提交的form?。没有数据将保存,但有上传的文件在服务器上。
我希望你们能帮我解决这个问题。谢谢

cidc1ykv

cidc1ykv1#

myDropzone.on("sending", function(file, xhr, formData) { 

 formData.append("fieldname1", $('field-name-1').val());  

});

您甚至可以自动执行此操作,并对#form的每个输入执行$.each,但基本逻辑如上所述。
其原理在tips选项卡下的docs中进行了概述。

a64a0gku

a64a0gku2#

发送时不必追加表单数据。请查看文档并使用headers属性
这些例子

var myDropzone = new Dropzone(".profile-image-upload",
    {
        paramName: "uploadfile",
        url: "/API/PeopleAPI/EditAsync",
        maxFiles: 1,
        headers: getData(),
        uploadMultiple: false,
        autoProcessQueue: false,
        maxFilesize: 20,
        acceptedFiles: "image",
        dictMaxFilesExceeded: "You can only upload 1 image",
        dictDefaultMessage: "",
    });

function getData() {
        var data = {
            //person
            UserName: $('#UserName').val(),
            AspNetUserID: '@Model.AspNetUserID',
            Roles: $('#UserRoles').val(),
            FirstName: $('#FirstName').val(),
            Email: $('#Email').val(),
            LastName: $('#LastName').val(),
            Gender: $('#Gender').val(),
            Password: $('#Password').val(),
            //address
            AddressLine1: $('#AddressLine1').val(),
            AddressLine2: $('#AddressLine2').val(),
            Town: $('#Town').val(),
            RegionID: $('#RegionID').val(),
            RegionName: $('#RegionID :selected').text(),
            City: $('#City').val(),
            CountyID: $('#CountyID').val(),
            CountyName: $('#CountyID :selected').text(),
            PostCode: $('#PostCode').val(),
          __RequestVerificationToken: $('[name="__RequestVerificationToken"').val()
        };
        return data;
    }
vwoqyblh

vwoqyblh3#

我不认为这是可能的。你必须先上传文件,然后数据库记录将被添加/更新。一旦你的请求提交到服务器,数据库记录将在纳秒内更新。所以不用担心。这是相同的核心php。
为了安全起见,您的web服务器和数据库服务器应该是相同的,以获得更有效的行为。
如果您仍然需要更高安全性,请编写一个crone作业,该作业将在一天结束时运行,并将取消所有文件与服务器的链接,这些文件不存在于数据库记录中。

相关问题