从前端抓取Django发送的文件

时间:2016-11-08 15:19:32

标签: javascript python ajax xml django

我试图通过http-request发布文件(类似于CURL -F请求)。所以我想要做的最好用以下代码描述:

def my_view(request):
    string_to_return = '<?xml version="1.0" encoding="UTF-8"?>...'
    file_to_send = ContentFile(string_to_return)
    response     = HttpResponse(file_to_send,'application/xml')
    response['Content-Length']      = file_to_send.size    
    response['Content-Disposition'] = 'attachment; filename="somefile.xml"'
    return response


$.get('/my_view/', function(response){
    var formData = new FormData();

    // file = ??? How do I grab the file ???
    formData.append("thefile", file);
    xhr.send(formData);
});

基本上,这里的问题是如何在客户端中获取xml文件。 提前谢谢!

一些注释

  1. 我需要在服务器端生成文件内容
  2. 我需要将文件传递到客户端并通过HTTP请求发送到外部服务器。

1 个答案:

答案 0 :(得分:1)

好的,所以你试图从django下载文件并从你的javascript应用程序上传到另一台服务器。我之前没有这样做,但根据https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data,它应该不会太难。

首先,下载二进制文件:

var oReq = new XMLHttpRequest();
oReq.open("GET", "/my_view/", true);
oReq.responseType = "blob";

oReq.onload = function(oEvent) {
  var blob = oReq.response;
  // ...see below for this step
  sendBlob(blob, 'http://www.example.com/other_url');
};

oReq.send();

接下来将二进制文件上传到您的其他服务器:

function sendBlob(blob, url){
    var oReq = new XMLHttpRequest();
    oReq.open("POST", url, true);
    oReq.onload = function (oEvent) {
      // Uploaded.
    };

    oReq.send(blob);
}