python - 在Django中使用ajax上传文件
问题描述
我将在我的页面中添加一个按钮来上传文件。用户单击此按钮并从计算机中选择文件,页面会将文件上传到服务器并向用户显示类似“上传成功”的消息。
我注意到 Django 有Filefield
模型,我们可以定义一个class FileForm
以便我们可以使用form = UploadFileForm(request.POST, request.FILES)
和form.save()
上传。
但是,由于我想在上传后刷新部分页面,所以我想使用 ajax 来发送数据。此外,为了使用request.FILES
它要求请求具有属性 enctype="multipart/form-data",我认为也许我们可以FormData()
在ajax中使用。
html:
<div>
<input type="file" name="" id="ul_input">
<input type="hidden" name="local_id" id="get-local-id" value="{{ record.local_id }}"/>
</div>
Javascript:
// grab your file object from a file input
$('#ul_input').change(function () {
var formData = new FormData();
formData.append("ul_file", this.files[0]);
formData.append("filename", this.files[0].name);
formData.append("local_id", $('#get-local-id').val());
$.ajax({
url: 'uploadfile',
type: 'POST',
data: formData,
processData: false,
contentType: false,
dataType: "json",
beforeSend: function () {
console.log("loading...please wait");
},
success: function (responseStr) {
if (responseStr.status === 0) {
alert('upload successfully');
} else {
alert("upload fail");
}
},
error: function (responseStr) {
console.log("error");
}
});
});
视图.py
def order_upload(request):
status = 1
if request.is_ajax():
local_id = request.POST.get('local_id')
post = DetailList.objects.get(local_id=local_id)
post.order_dir = request.FILES['ul_file']
post.save()
status = 0
return HttpResponse(json.dumps({'status': status}), content_type='application/json')
模型.py
def file_directory_path(instance, filename):
return 'file_list/{0}{1}/{2}'.format(instance.upload_date.strftime('%Y'),
instance.upload_date.strftime('%m'),
filename)
class DetailList(models.Model):
local_id = models.IntegerField(...)
start_date = models.DateField(...)
order_dir = models.FileField(upload_to=file_directory_path, blank=True, null=True)
不要忘记MEDIA_ROOT = '/media/'
在 settings.py 中设置
我尝试上传文件'test.docx'。现在看来我已经上传文件了media/file_list/201807/test.docx
。我也检查order_dir
了表格,它已经变成file_list/201807/test.docx
了。我收到警报说'上传成功'。
但是,我在目录“media/file_list/201807/test.docx”中找不到我的“test.docx”。
我上传的文件在哪里?任何人都可以帮忙吗?
解决方案
推荐阅读
- regex - 提取目录中所有文件的两个关键字之间的字符串
- c - C 分叉进程不断显示在“ps -a”输出中
- html - 垂直居中自定义列表项目符号
- puppeteer - puppeteer:document.querySelector 适用于控制台但不适用于 puppppeteer
- matlab - 如何在MATLAB中循环求解非线性方程
- java - 如何更改spring mockmvc的http端口
- php - PHP中的正则表达式:从另一个字符串中检索特定字符串
- java - 解析字符串对象的名称(Java)
- elasticsearch - 弹性搜索中的通配符和模糊查询
- ionic-framework - 如何将地图与 Ionic 集成