从客户端 A ,我想通过javascript动态创建一个文件,并通过Ajax将其发送到Django服务器 B 进行进一步处理。
A 中的javascript代码如下所示。我使用blob创建一个没有真实上传文件的文件,并通过Ajax发送。
console.log("start sending binary data...");
var form = new FormData();
var blob = new Blob([bytesArray], {type: 'example/binary'});
form.append('file_name', blob, 'test.bin');
$.ajax({
url: THIRD_SERVER + 'test_binary',
type: 'POST',
data: form,
processData: false,
success: function(data){
console.log('test_binary ' + JSON.stringify(data));
}
});
然而,在Django服务器上,我得到的是这样的(当我print request.POST
时),因此当我使用Django FileUpload时,它返回了一个异常。
<QueryDict: {u' name': [u'"file_name"'], u'------WebKitFormBoundarybCp3z7mAduz8BBDq\r\nContent-Disposition: form-data': [u''], u' filename': [u'"test.bin"\r\nContent-Type: example/binary\r\n\r\n\ufffd\ufffd\ufffd\x01\x05\x06\r\n------WebKitFormBoundarybCp3z7mAduz8BBDq--\r\n']}>
所以我猜上面的javascript并不能将文件发送到Django服务器。有没有正确的方法可以使用FileUpload来处理?
谢谢,
答案 0 :(得分:1)
你必须告诉$ .ajax不要设置内容类型,否则会设置错误
$.ajax({
url: THIRD_SERVER + 'test_binary',
type: 'POST',
data: form,
processData: false,
contentType: false,
success: function(data){
console.log('test_binary ' + JSON.stringify(data));
}
});