【发布时间】:2014-12-29 23:48:55
【问题描述】:
我想制作两个 jQuery 文件上传处理程序 - 一个到 server1,另一个到 server2。像这样的:
$('#fileupload').fileupload({
url: 'server1',
type: 'POST',
autoUpload: true,
formData: {
....
}
})
$('#fileupload').fileupload({
url: 'server2',
type: 'POST',
autoUpload: true,
disableImageResize: false,
imageMaxWidth: 200,
imageMaxHeight: 200
})
但是,当我这样做时,只有第二个处理程序被调用,因此只有第二个服务器接收文件。如何让两台服务器都接收文件?
更新:
有些人指出这些调用是异步的,这是真的 - 但回调方法也不起作用,这就是我需要帮助的原因:
$('#fileupload').fileupload({
url: 'server1',
type: 'POST',
autoUpload: true,
formData: {
....
}
}).on('fileuploadstop', function(){
$('#fileupload').fileupload({
url: 'server2',
type: 'POST',
autoUpload: true,
disableImageResize: false,
imageMaxWidth: 200,
imageMaxHeight: 200
})
});
编辑 2
我仍在努力解决这个问题 - 我越来越接近了,但我还没有完全明白。
我的目标是当用户添加一个文件时,它会被上传到一个服务器,然后立即以不同的设置上传到另一台服务器。
这是最近的一个实现——第一次可以工作,但第二次对两个服务器都有多次调用。看来,即使我只初始化 fileupload() 一次(使用互斥锁)并小心在第二次调用中取消设置我的生命周期回调,下次有人上传文件时它仍然会双重触发。有什么想法吗?
<form id="form_file_upload" action="/upload" method="post" enctype="multipart/form-data">
<input type="file" id="fileupload" name="file" multiple>
<input type="submit" value="Upload">
</form>
$(function() {
$('#fileupload').on('change', function(){
var fileUploadAddFn = function (e, data) {
// lifecycle callback
// do stuff
};
var fileSetupFirstUpload = function (){
$('#fileupload').fileupload( // initialize first server
'option',
{
url: 'server1',
type: 'POST'
}
);
$('#fileupload').on('fileuploadaddfn', fileUploadAddFn); // set a lifecycle callback for 1st upload
};
var fileSetupSecondUpload = function() {
$('#fileupload').fileupload( // initialize first server
'option',
{
url: 'server2',
type: 'POST'
}
);
$('#fileupload').off('fileuploadaddfn');
$('#fileupload').off('fileuploadstop');
}
var filesToUpload = $('#fileupload')[0].files; // this works since fileupload is not yet initialized
if(typeof fileUploadInitialized == 'undefined'){
$('#fileupload').fileupload();
fileUploadInitialized = true; // global mutex to only initialize once
}
fileSetupFirstUpload();
$('#fileupload').on('fileuploadstop', function (e, data) {
fileSetupSecondUpload();
$('#fileupload').fileupload('add', {files: filesToUpload});
$('#fileupload').fileupload('send');
});
$('#fileupload').fileupload('add', {files: filesToUpload});
$('#fileupload').fileupload('send');
});
【问题讨论】:
-
这些电话是
asynchronous。第二个可能在第一个完成之前开始,覆盖它。 -
第一次上传完成后,通过第一次的回调触发第二次
-
@NicholasKyriakides 我也尝试过这种方法,但似乎没有用
-
是否可以上传到单个PHP文件,这样用户只需上传一次文件……那么,PHP文件可以将文件上传到第二台服务器吗?之后,PHP 文件可以返回一个带有回调数据的 JSON 字符串吗?
标签: jquery html jquery-file-upload