在每次上传文件时发送带有 dropzone.js 的自定义数据
Send custom data with dropzone.js on each File Upload
我在我的 Code Igniter 项目中使用 dropzone。
每次拖动文件时,dropzone 都会创建一个 ajax 请求,我的文件也会存储在服务器上。但是现在,我的要求是我想与文件一起发送附加数据 (DYNAMIC)。
使用params,只能发送静态数据,但是我要发送的数据每次都在变化。
我的代码是这样的:
<script>
Dropzone.autoDiscover = false;
Dropzone.options.attachment = {
init: function(){
this.on('removedfile',function(file){
// console.log('akjsdhaksj');
var fileName = file.name;
$.ajax({
type: 'POST',
url: "<?php echo BASE_URL.'index.php/admin/mail_actions/deleteFile' ?>",
data: "id="+fileName,
dataType: 'html'
});
});
},
// params: {
// customerFolder: $('#toValue').substr(0, toValue.indexOf('@')),
// },
dictDefaultMessage:"Click / Drop here to upload files",
addRemoveLinks: true,
dictRemoveFile:"Remove",
maxFiles:3,
maxFilesize:8,
}
$(function(){
var uploadFilePath = "<?php echo BASE_URL.'index.php/admin/mail_actions/uploadFile' ?>";
var myDropzone = new Dropzone("div#attachment", { url: uploadFilePath});
});
</script>
我能做到吗?
我明白了。
这是我必须使用的
myDropzone.on('sending', function(file, xhr, formData){
formData.append('userName', 'bob');
});
Abhinav 有正确且可行的答案我只想提供第二个选项以在选项对象中使用它(例如,如果您在一页上有多个 Dropzone 部分。)
myDropzone.options.dropzoneDivID = {
sending: function(file, xhr, formData){
formData.append('userName', 'Bob');
}
};
如果您有嵌套的有效负载对象 - 例如将名称添加到您的文件,您的 api 只接受类似这样的内容
{
someParameter: {
image: <my-upload-file>,
name: 'Bob'
}
}
你的 dropzone 设置应该是这样的
var myDropzone = new Dropzone("div#attachment", {
url: uploadFilePath,
paramName: 'someParameter[image]'
});
myDropzone.on('sending', function(file, xhr, formData){
formData.append('someParameter[image]', file);
formData.append('someParameter[userName]', 'bob');
});
我只添加了这个,因为从现在开始没有记录嵌套参数的示例。
我使用的是 JQuery,这对我来说是有效的:
$("#dZUpload").dropzone({
url: "ajax/upload_img_ben.php",
success: function (file, response) {
var imgName = response;
file.previewElement.classList.add("dz-success");
console.log("Successfully uploaded :" + imgName);
},
error: function (file, response) {
file.previewElement.classList.add("dz-error");
},
sending: function(file, xhr, formData){
formData.append('id', '5');
}
});
我在我的 Code Igniter 项目中使用 dropzone。
每次拖动文件时,dropzone 都会创建一个 ajax 请求,我的文件也会存储在服务器上。但是现在,我的要求是我想与文件一起发送附加数据 (DYNAMIC)。 使用params,只能发送静态数据,但是我要发送的数据每次都在变化。
我的代码是这样的:
<script>
Dropzone.autoDiscover = false;
Dropzone.options.attachment = {
init: function(){
this.on('removedfile',function(file){
// console.log('akjsdhaksj');
var fileName = file.name;
$.ajax({
type: 'POST',
url: "<?php echo BASE_URL.'index.php/admin/mail_actions/deleteFile' ?>",
data: "id="+fileName,
dataType: 'html'
});
});
},
// params: {
// customerFolder: $('#toValue').substr(0, toValue.indexOf('@')),
// },
dictDefaultMessage:"Click / Drop here to upload files",
addRemoveLinks: true,
dictRemoveFile:"Remove",
maxFiles:3,
maxFilesize:8,
}
$(function(){
var uploadFilePath = "<?php echo BASE_URL.'index.php/admin/mail_actions/uploadFile' ?>";
var myDropzone = new Dropzone("div#attachment", { url: uploadFilePath});
});
</script>
我能做到吗?
我明白了。 这是我必须使用的
myDropzone.on('sending', function(file, xhr, formData){
formData.append('userName', 'bob');
});
Abhinav 有正确且可行的答案我只想提供第二个选项以在选项对象中使用它(例如,如果您在一页上有多个 Dropzone 部分。)
myDropzone.options.dropzoneDivID = {
sending: function(file, xhr, formData){
formData.append('userName', 'Bob');
}
};
如果您有嵌套的有效负载对象 - 例如将名称添加到您的文件,您的 api 只接受类似这样的内容
{
someParameter: {
image: <my-upload-file>,
name: 'Bob'
}
}
你的 dropzone 设置应该是这样的
var myDropzone = new Dropzone("div#attachment", {
url: uploadFilePath,
paramName: 'someParameter[image]'
});
myDropzone.on('sending', function(file, xhr, formData){
formData.append('someParameter[image]', file);
formData.append('someParameter[userName]', 'bob');
});
我只添加了这个,因为从现在开始没有记录嵌套参数的示例。
我使用的是 JQuery,这对我来说是有效的:
$("#dZUpload").dropzone({
url: "ajax/upload_img_ben.php",
success: function (file, response) {
var imgName = response;
file.previewElement.classList.add("dz-success");
console.log("Successfully uploaded :" + imgName);
},
error: function (file, response) {
file.previewElement.classList.add("dz-error");
},
sending: function(file, xhr, formData){
formData.append('id', '5');
}
});