我将PDF文件保存在变量“报告”中。
我正在使用Django并希望使用POST将其传递给views.py文件中的函数 -
@xframe_options_exempt
@csrf_exempt
def process_report(request):
if request.method == 'POST'
report_file = request.FILES['docfile']
....
return response
如何使用此文件发送ajax POST请求?文件类型是PDF。
之前我使用HTML表单来执行此操作,但我想使用javascript设置表单上传的样式。我尝试使用javascript设置按钮样式(根据上传的文件类型更改颜色和文本),但该文件不再能够通过POST请求传递。现在我只是将文件保存在一个javascript变量中,我试图通过POST传递它而不使用表单。我知道用文件预填充表格是不可能的。
我的旧代码:
<form id="boring" action="{% url "process_report" %}" method="post"
enctype="multipart/form-data">
{% csrf_token %}
{{ form.non_field_errors }}
{{ form.docfile.label_tag }} {{ form.docfile.help_text }
{{ form.docfile.errors }}
{{ form.docfile }}
</form>
我一直在尝试用ajax
var formdata = new FormData(report);
$.ajax({
url: 'process_report',
type: 'POST',
processData: false,
contentType: false,
dataType : 'application/pdf',
data: {
'content': 'formdata',
'csrfmiddlewaretoken': '{{ csrf_token }}',
}
答案 0 :(得分:0)
我解决了自己的问题。我最终决定使用xhr而不是ajax,但这里是ajax的答案。
首先,我正在错误地设置表单数据,因为它应该是
// Set up form data
var formData = new FormData();
formData.append("docfile", report)
其次,ajax必须更新
// Pass the form to views via POST
$.ajax({
url: "{% url "process_report" %}",
type: 'POST',
data: formData,
cache: false,
processData: false, // essential
contentType: false, // essential, application/pdf doesn't work.
enctype: 'multipart/form-data',
// If sucess, download file
success: function(data, status, xhr) {
console.log(data;
}
});