我有一些JavaScript代码可以在用户单击按钮时动态生成kml或xml文件。我希望能够在将该文件生成到我的Django服务器之后上传该文件。没有文件输入字段,用户从他/她的计算机输入文件。该文件只是根据其他内容动态生成。
有没有办法模拟文件上传而不在html中实际拥有表单,可能是通过使用javascript / jquery生成表单并以某种方式在表单中注入生成的文件?
请告知如何做到这一点。
这是我的Django视图,用于处理上传,该视图适用于用户输入文件:
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 :(得分:0)
似乎你在制作正确的ajax请求时遇到了困难。
正如@ freedomn-m所评论的那样,您当前引用的“文件”仅存在于内存中。
因此,处理此问题的最佳方法是不要使用FileUploadForm
来接收服务器端的数据,因为您实际上没有要上传的文件。只需使用处理普通字符串的东西即可。
假设您在js代码中将生成的xml存储在var xmlFile
var xhr = new XMLHttpRequest();
xhr.open('POST', '/your_url');
xhr.setRequestHeader('Content-Type', 'text/plain')
xhr.send(xmlFile);
现在在django:
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)))
就是这样。
参考文献: