Django - 实现简单的文件上传功能

前端

<form action="" method="post" enctype="multipart/form-data">
{#<form action="" method="post" enctype="application/x-www-form-urlencoded">#}

    <input type="file" name="myfile">
    <input type="submit" value="提交">
</form>

'''
必须进行配置,且前二者解决编码问题,即可解决中文传输乱码问题
enctype="multipart/form-data" :不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
enctype="application/x-www-form-urlencoded" : 在发送前编码所有字符(默认)

enctype="text/plain" : 空格转换为 "+" 加号,但不对特殊字符编码。

'''

视图函数

from django.shortcuts import render, HttpResponse
import os,time

def fileupload(request):
    if request.method == 'GET':
        return render(request, 'fileupload.html')

    if request.method == 'POST':

        # FILES
        print(request.FILES)
        # <MultiValueDict: {'myfile': [<InMemoryUploadedFile: 1.png (image/png)>]}>
        print(type(request.FILES.get('myfile')))
        # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
        # from django.core.files.uploadedfile import InMemoryUploadedFile

        # 从字典里根据名字,把文件取出来
        myfile = request.FILES.get('myfile')
        print(myfile)
        print(type(myfile))
        # 1.png
        # <class 'django.core.files.uploadedfile.InMemoryUploadedFile'>
        
        # 文件名字
        name = myfile.name
        print(name)
        print(type(name))
        # 1.png
        # <class 'str'>

        # 若存在相同文件,通过时间戳改名再上传
        if os.path.exists(name):
            # return HttpResponse('false')
            now = time.strftime('_%Y%m%d%H%M%S')
            name = name.replace('.',now+'.')
            print(name)

        # 打开文件,把上传过来的文件通过文件处理,循环存到本地
        with open(name, 'wb') as f:
            # for line in myfile.chunks(): 等同于 for line in myfile:
            for line in myfile:
                f.write(line)

        # 存储成功 返回前端数据
        return HttpResponse('ok')

猜你喜欢

转载自blog.csdn.net/qq_33961117/article/details/83899860