Django| 获取JQuery上传的文件,无需保存直接进行处理

目录

步骤一:HTML代码

步骤二:JS代码

步骤三:Django| 编写Form类

步骤四:Django| 编写View函数


步骤一: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为InMemoryUploadedFileInMemoryUploadedFile只能读取一次,若多次读取,获得的内容会为空。

实际运行如下:

#第一次读取
file_content = uploaded_file.read()
print(file_content)

#再次读取
file_content1 = uploaded_file.read()
print(file_content1)

 输出结果如下:

#第一次读取 ---正常
b'>chr4,69176316,69176359,-\nuguugccagcaguuaacugaccaagcuagaguucccugacccaacguaagggugacugugacacacauggauaauuuuagcuucauguuuaagauuuuguuauuugg'

#再次读取 ---内容为空
b''
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值