目录
步骤一:HTML代码
<input type="file" name="fileToUpload" id="fileToUpload">
步骤二:JS代码
注意:用 ajax请求时,必须设置contentType与processData,否则会报错。
let files = $('#fileToUpload')[0].files
let username="testuser"
console.log(files)
console.log(files[0])
let fd = new FormData()
fd.append('fa_file', files[0])
fd.append('username',username)
$.ajax({
method: 'POST',
url: 'mutirbpfile',
data: fd,
// 不修改 Content-Type 属性,使用 FormData 默认的 Content-Type 值
contentType: false,
// 不对 FormData 中的数据进行 url 编码,而是将 FormData 数据原样发送到服务器
processData: false,
success: function (res) {
console.log(res)
}
})
步骤三:Django| 编写Form类
class FaUploadForm(forms.Form):
fa_file = forms.FileField(label="上传文件")
username=forms.CharField(max_length=100, label="用户名")
步骤四:Django| 编写View函数
@csrf_exempt
def fileUpload(request):
form = FaUploadForm(request.POST, request.FILES) #FaUploadForm为第三步编写的form类
if form.is_valid():
#获取username
username = form.cleaned_data['username']
print(username)
#获取文件
fa_file = request.FILES.get("fa_file")
print(type(fa_file)) #<class'django.core.files.uploadedfile.InMemoryUploadedFile'>
#读取文件
file_content = uploaded_file.read().decode('utf-8')
print(file_content) #和读取本地文件的效果一样
#处理文件操作
return HttpResponse(json.dumps(context), content_type="application/json;charset=utf-8")
需要注意:fa_file = request.FILES.get("fa_file")中fa_file的type为InMemoryUploadedFile,InMemoryUploadedFile只能读取一次,若多次读取,获得的内容会为空。
实际运行如下:
#第一次读取
file_content = uploaded_file.read()
print(file_content)
#再次读取
file_content1 = uploaded_file.read()
print(file_content1)
输出结果如下:
#第一次读取 ---正常 b'>chr4,69176316,69176359,-\nuguugccagcaguuaacugaccaagcuagaguucccugacccaacguaagggugacugugacacacauggauaauuuuagcuucauguuuaagauuuuguuauuugg' #再次读取 ---内容为空 b''