Django 文件上传

form表单:

<form action="/upload/" method="post" enctype="multipart/form-data">
                {% csrf_token %}
                <input type="file" name="myfile">
                <input type="submit">
            </form>

创建一个form表单,需要特别注意的是,在有文件上传的form表单中,method属性必须为post,而且必须指定它的enctype为"multipart/form-data",表明不对字符进行编码。

设置urls

在views中

def formtableupload(request):
    if request.method == 'POST':
        '''form表单接收文件
        '''
        file_obj=request.FILES.get('myfile',None)#文件在FILES中
        print(file_obj)
        print(type(file_obj))
        if  file_obj:
            with open(file_obj.name,'wb') as f:#路径可设置
                for chunk in file_obj.chunks():# 分块写入文件  
                    f.write(chunk)

    return HttpResponse('OK')

myFile.read():从文件中读取整个上传的数据,这个方法只适合小文件;

    myFile.chunks():按块返回文件,通过在for循环中进行迭代,可以将大文件按块写入到服务器中;

   myFile.multiple_chunks():这个方法根据myFile的大小,返回True或者False,当myFile文件大于2.5M(默认为2.5M,可以调整)时,该方法返回True,否则返回False,因此可以根据该方法来选择选用read方法读取还是采用chunks方法:

      if myFile.multiple_chunks() == False:

         # 使用myFile.read()

      else:

         # 使用myFile.chunks()

   myFile.name:这是一个属性,不是方法,该属性得到上传的文件名,包括后缀,如123.exe;

   myFile.size:这也是一个属性,该属性得到上传文件的大小。

==================================================================================

AJAX方式
html
 <div class="form-gtoup file_img">
                    
 <input type="file" class="sol" id="file_input">
 <button>upload</button> </div>

jquery
$(".submit_login").click(function () {
var formdeta=new FormData//创建一个H5对象
formdeta.append('csrfmiddlewaretoken',$('[name=csrfmiddlewaretoken]').val())//装入验证
formdeta.append('img',$('#file_input')[0].files[0])//装入文件
$.ajax({
          url: '/reg/',
          type: "POST",
          data: formdeta,
          processData: false,      // 使用formdata,processData,contentType必须设为false
             contentType: false,
          success:function (data) {alert(data)}



views
if forms_obj.is_valid(): 

 	file_obj=request.FILES.get('img')#接收文件对象
	models.UserInfo.objects.create_user(img=file_obj)
	return HttpResponse('OK')


















  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值