Javascript 如何使用ajax和django上传文件?
我是新来的。您能告诉我如何使用ajax向服务器发送文件吗。我可以向我的服务器提交一个字符串,但我不知道ajax如何处理文件 上传_stuff.jsJavascript 如何使用ajax和django上传文件?,javascript,django,ajax,file,upload,Javascript,Django,Ajax,File,Upload,我是新来的。您能告诉我如何使用ajax向服务器发送文件吗。我可以向我的服务器提交一个字符串,但我不知道ajax如何处理文件 上传_stuff.js $(document).on('submit', '#CustomerRequest', function(e){ e.preventDefault(); $.ajax({ type:'POST', url:'/create_request', data:{ ajax_file1:$('#html_file1'
$(document).on('submit', '#CustomerRequest', function(e){
e.preventDefault();
$.ajax({
type:'POST',
url:'/create_request',
data:{
ajax_file1:$('#html_file1').val(),
ajax_file2:$('#html_file2').val(),
ajax_file2:$('#html_file3').val(),
...
view.py
def create_request (request):
if request.method == "POST":
server_file1 = request.FILES('ajax_files1')
server_file2 = request.FILES('ajax_file2')
server_file3 = request.FILES('ajax_file3')
我的html表单上确实有csrf_标记和enctype=“multipart/form data”我不知道这是否有用,但在JQuery中,
$('#fileinput').val()
不会返回“Ajax友好”的文件数据,请尝试使用document.getElementById('fileinput').files[0]
使用原始javascript获取文件数据,并尝试在ajax请求中添加这些选项
contentType:false,
processData:false,
我不知道这是否有用,但在JQuery中,$('#fileinput').val()
不会返回“Ajax友好”的文件数据,请尝试使用document.getElementById('fileinput').files[0]
使用原始javascript获取文件数据,并尝试在ajax请求中添加这些选项
contentType:false,
processData:false,
我已经尝试过这个方法,效果很好,希望它也适用于您
首先在forms.py文件中创建一个相关表单,如下所示:
from django import forms
class FileForm(forms.Form):
file = forms.FileField(required=True)
def saveFile(request):
if(request.user != AnonymousUser()):
try:
if request.method == 'POST':
file_form = FileForm(request.POST, request.FILES)
sg_id = request.POST.get("sg_id")
subgroup = SubGroup.objects.get(pk=sg_id)
if(file_form.is_valid()):
file = file_form.cleaned_data["file"]
name = str(file)
f, extension = os.path.splitext(name)
if(extension in valid_extensions):
obj = Files.objects.create(
file = file,
subgroup = subgroup,
creator = request.user,
created_at = datetime.datetime.now(),
name = name
)
.......
.......
.......
在html文件中,它看起来像:
<div>
<form id="file_form" action="/application/new_file/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<label class="btn btn-info btn-xs" for="subgroup_file" style="background-color: #042d63;border-color: #dddddd;border-width: 2px;color: white;padding: 5px 21px;" id="send_file" data-toggle="tooltip" data-placement="auto top" title="Choose The File">
<input id="the_file" name="file" type="file" style="display:none;">
<span class="glyphicon glyphicon-paperclip"></span>
</label>
<input type="submit" id="file_form_submit" class="my-small-btn" value="Submit" data-toggle="tooltip" data-placement="auto top" title="Submit File">
</form>
</div>
在这里,我还添加了一个通知用户他/她只允许上传PDF文件。URL最终会将您从URL.py
带到views.py
中名为saveFile
的函数,该函数如下所示:
from django import forms
class FileForm(forms.Form):
file = forms.FileField(required=True)
def saveFile(request):
if(request.user != AnonymousUser()):
try:
if request.method == 'POST':
file_form = FileForm(request.POST, request.FILES)
sg_id = request.POST.get("sg_id")
subgroup = SubGroup.objects.get(pk=sg_id)
if(file_form.is_valid()):
file = file_form.cleaned_data["file"]
name = str(file)
f, extension = os.path.splitext(name)
if(extension in valid_extensions):
obj = Files.objects.create(
file = file,
subgroup = subgroup,
creator = request.user,
created_at = datetime.datetime.now(),
name = name
)
.......
.......
.......
子组
和文件
是在models.py
中定义的对象,它们将您连接到数据库。我已经尝试过这个方法,效果很好,希望它也适用于您
首先在forms.py文件中创建一个相关表单,如下所示:
from django import forms
class FileForm(forms.Form):
file = forms.FileField(required=True)
def saveFile(request):
if(request.user != AnonymousUser()):
try:
if request.method == 'POST':
file_form = FileForm(request.POST, request.FILES)
sg_id = request.POST.get("sg_id")
subgroup = SubGroup.objects.get(pk=sg_id)
if(file_form.is_valid()):
file = file_form.cleaned_data["file"]
name = str(file)
f, extension = os.path.splitext(name)
if(extension in valid_extensions):
obj = Files.objects.create(
file = file,
subgroup = subgroup,
creator = request.user,
created_at = datetime.datetime.now(),
name = name
)
.......
.......
.......
在html文件中,它看起来像:
<div>
<form id="file_form" action="/application/new_file/" method="POST" enctype="multipart/form-data">
{% csrf_token %}
<label class="btn btn-info btn-xs" for="subgroup_file" style="background-color: #042d63;border-color: #dddddd;border-width: 2px;color: white;padding: 5px 21px;" id="send_file" data-toggle="tooltip" data-placement="auto top" title="Choose The File">
<input id="the_file" name="file" type="file" style="display:none;">
<span class="glyphicon glyphicon-paperclip"></span>
</label>
<input type="submit" id="file_form_submit" class="my-small-btn" value="Submit" data-toggle="tooltip" data-placement="auto top" title="Submit File">
</form>
</div>
在这里,我还添加了一个通知用户他/她只允许上传PDF文件。URL最终会将您从URL.py
带到views.py
中名为saveFile
的函数,该函数如下所示:
from django import forms
class FileForm(forms.Form):
file = forms.FileField(required=True)
def saveFile(request):
if(request.user != AnonymousUser()):
try:
if request.method == 'POST':
file_form = FileForm(request.POST, request.FILES)
sg_id = request.POST.get("sg_id")
subgroup = SubGroup.objects.get(pk=sg_id)
if(file_form.is_valid()):
file = file_form.cleaned_data["file"]
name = str(file)
f, extension = os.path.splitext(name)
if(extension in valid_extensions):
obj = Files.objects.create(
file = file,
subgroup = subgroup,
creator = request.user,
created_at = datetime.datetime.now(),
name = name
)
.......
.......
.......
子组
和文件
是在models.py
中定义的对象,它们将您连接到数据库。是否有方法提交其他信息,而不仅仅是文件?可以是您想要的任何信息。你有什么想法?有没有一种方法可以提交其他信息,而不仅仅是文件?它可以是你想要的任何东西。你有什么想法?