【发布时间】:2015-10-06 17:23:53
【问题描述】:
我正在尝试从 Ajax 帖子处理 Django 中的文件上传,它不起作用:(
下面是上传的html文件中的代码:
<form action="{% url 'saveprof' %}" method="post" enctype="multipart/form-data" id="form1">
{% csrf_token %}
<div class="profpic" style="background:url(../../../static/app/img/profile.png)">
<input type="file" id="picpath" name="picpath" class="uploadpic" value=""/>
</div>
</form>
{% csrf_token %}
保存
下面的Ajax方法用于发布数据:
function saveprof() {
var formData = {
'picpath_Aj': $('#picpath').val()
};
$.ajax({
type: "POST",
url: "saveprof",
enctype: 'multipart/form-data',
async: true,
data: {
formData,
'profemail_Aj': $('#profemail').val(),
'csrfmiddlewaretoken': $("input[name=csrfmiddlewaretoken]").val()
},
success: function (data, textStatus, jqXHR) {
$('#message').html(data);
}
});
}
这可能吗?
如何使用 html 表单进行文件上传并通过上述 ajax 方法发送这些数据?
这里是风景
def saveprof(request):
if request.method == "POST":
user_form1 = DocumentForm(request.POST, request.FILES)
if user_form1.is_valid():
user_form1.save()
#And code to save some other fields as well along with the user_form1
Form.py
class DocumentForm(forms.ModelForm):
picpath = forms.FileField()
class Meta:
model = td_Student
fields = ('picpath',)
模型.py
class td_Student(models.Model):
picpath=models.FileField(upload_to=unique_filename)
def unique_filename(instance, filename):
ext = filename.split('.')[-1]
filename = "%s_%s.%s" %(uuid.uuid4(),time.strftime("%Y%m%d_%H%M%S"), ext)
return os.path.join('documents/documents/'+time.strftime("%Y%m%d"), filename
运行此代码时,user_form1.save() 永远不会被执行,因为它在视图中的有效性条件失败。
我尝试了几个小时来找出问题所在,但无法解决。 您能帮我确定一下这个实现有什么问题吗?
图像未保存在服务器中:(..我无法按预期获取文件名(例如:'documents/documents/20150716/a1f81a80-ce6f-446b-9b49-716b5c67a46e_20150716_222614.jpg' unique_filename 方法)
请注意,当我使用 HTML 表单而不是使用 Ajax 发布时,我可以成功上传图片。但我对当前实现的要求仅是 Ajax。
【问题讨论】:
-
找到未验证内容的一种可能的简单方法是
print form.errors,而不是is_valid -
嗨 Raja,我已经用过了,错误是,'需要字段 picpath'.. 看起来 picpath 没有通过 Ajax 方法发送到我的视图。 picpath 的值是错误的(对于任何上传的图像,它都会显示类似 'c:\fakepath\imagename.jpg' )
-
您可以在
saveprof视图中打印request.POST吗?似乎您没有使用picpath键发送任何值。