This is really hard to answer without digging through the internals of file-upload or having an example to mess with, but I think you should be able to accomplish this with a couple minor tweaks. First, make the change @wachme suggested as that is an issue. Second, pass the upload object to your queue:
return $('#fileupload').fileupload({
type: 'POST',
add: function(e, data) {
var params = { uploader: $(this), data: data };
q.push(params, function (err) {
if (err) {
console.log('failed processing file '+data.guid+': '+err);
return(false);
}
});
}
});
Then, use that parameter in your processing:
var q = async.queue(function (params, callback) {
params.data.process(function () {
return params.uploader.fileupload('process', params.data);
}).done(function () {
callback();
return params.data.submit();
}, 1);