2016-05-06 12 views
0

ユーザーがボタンをクリックしたときに、動的にkmlまたはxmlファイルを生成するJavaScriptコードがあります。このファイルを私のDjangoサーバーに生成した後にアップロードできるようにしたいと思います。ユーザーが自分のコンピューターからファイルを入力するファイル入力フィールドはありません。このファイルは、単に他のコンテンツに基づいて動的に生成されます。javascriptで生成されたファイルをサーバーにアップロードします。

実際にはHTML形式のファイルをアップロードせずに、おそらくjavascript/jqueryでフォームを生成し、何らかの形で生成されたファイルを挿入することで、ファイルのアップロードをシミュレートする方法はありますか?

どうすればこのことが可能かアドバイスしてください。あなたは困難適切なAJAX要求を行うことを持っているよう

def file_upload(request): 
if request.is_ajax(): 
    if request.method == 'POST': 
     form = FileUploadForm(files=request.FILES) 
     instance = Files(user=request.user, file=request.FILES['file']) 
     instance.save() 
     return HttpResponse(json.dumps(list_files(request.user))) 
else: 
    return HttpResponse(json.dumps(list_files(request.user))) 
+0

あなたが "ファイル" で何を意味するかを説明する必要があります - "ファイルは" クライアントでJavaScriptによって生成された場合(そのため、ファイルのアップロード制御が必要です)、ハードドライブに保存されているファイルではないため(ファイルアップロードコントロールは必要ありません)、テキスト内に配置できる変数のテキストになりますまたは隠された入力。 –

答えて

0

は思え:

はここで、ユーザの入力ファイルと正常に動作し、アップロードを処理するための私のDjangoの図です。

@ freedomn-mがコメントしたように、あなたが参照している "ファイル"は現在のところ、メモリ内にのみ存在しています。

これを処理する最善の方法は、実際にアップロードするファイルがないため、サーバー側でデータを受信するためにFileUploadFormを使用しないでください。単純な文字列を処理するだけで十分です。

のは、あなたのJSコードで言ってみましょう、あなたはジャンゴで今

var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/your_url'); 
xhr.setRequestHeader('Content-Type', 'text/plain') 
xhr.send(xmlFile); 

var xmlFileであなたの生成されたXMLを格納します。これだけです

if request.is_ajax(): 
if request.method == 'POST': 
    file_content = request.body 
    instance = Files(user=request.user, file=ContentFile(file_content)) 
    instance.save() 
    return HttpResponse(json.dumps(list_files(request.user))) 

を。

参考文献:

  1. https://docs.djangoproject.com/en/1.9/ref/request-response/#django.http.HttpRequest.body
  2. https://docs.djangoproject.com/en/1.9/ref/files/file/#the-contentfile-class
関連する問題