Para desactivar este funcionamiento y hacer el envío "raw" tenemos que poner el responseType como 'blob', de esta forma:
$("#bt_envia").on("click", function (e) {
var x = new XMLHttpRequest();
x.onload = function() {
// Create a form
var fd = new FormData();
fd.append("upfile", x.response); // x.response is a Blob object
fd.append("csrfmiddlewaretoken", "{{ csrf_token }}");
// Upload to your server
var y = new XMLHttpRequest();
y.onload = function() {
alert('Fichero subido!!');
};
y.open('POST', '/gestion/prova/');
y.send(fd);
};
x.responseType = 'blob';
x.open('GET', 'http://planetary.s3.amazonaws.com/assets/images/spacecraft/2013/20131108_2013-3896_f537.jpg', true);
x.send();
En la parte del servidor, los FILES nos vendrán directamente en el formato nativo, así que sólo tenemos que tratarlos directamente, por ejemplo grabando una imagen en un fichero.
def prova(request):
#print str(request.body)
# veure https://docs.djangoproject.com/en/dev/topics/http/file-uploads/
print "Els files son ", str(request.FILES)
f = request.FILES['upfile']
with open('c:/prova.jpg', 'wb+') as destination:
for chunk in f.chunks():
destination.write(chunk)
return HttpResponse('Mu guay')
Fuente: varios en stackoverflow