Django文件上传【单个/多个图片上传】

时间:2024-03-05 13:23:20

准备工作

python:3.6.8
django:2.2.1

新建django项目

 确定项目名称、使用的虚拟环境【当然这个也可以后期修改】、app的名称

创建成功,选择在新的窗口中打开

图片上传

修改配置文件DjangoFileUpload/settings.py

MEDIA_URL = \'/media/\'
MEDIA_ROOT = os.path.join(BASE_DIR, \'media\').replace(\'\\\', \'/\')    #media即为图片上传的根路径

 添加表模型FileUpload/models.py

from django.db import models

class Img(models.Model):
    img_url = models.ImageField(upload_to=\'photos/\',blank=True,null=True) #指定图片上传路径,即media/photos/

数据迁移

python manage.py makemigrations
python manage.py migrate
(django_shop) ------------------------------------------------------------
~/Desktop/DjangoFileUpload » python manage.py makemigrations                                                                                      mosson@bogon
Migrations for \'fileUpload\':
  fileUpload/migrations/0001_initial.py
    - Create model Img
(django_shop) ------------------------------------------------------------
~/Desktop/DjangoFileUpload » python manage.py migrate                                                                                             mosson@bogon
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, fileUpload, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions... OK
  Applying fileUpload.0001_initial... OK
  Applying sessions.0001_initial... OK
(django_shop) ------------------------------------------------------------
~/Desktop/DjangoFileUpload »  

 增加图片上传的路由 DjangoFileUpload/urls.py

from django.contrib import admin
from django.urls import path
from fileUpload import views

urlpatterns = [
    path(\'admin/\', admin.site.urls),
    path(r\'uploadImg/\',views.uploadImg,name=\'uploadImg\'),
]

 增加图片上传的视图 views.py

from .models import Img

#图片上传
def uploadImg(request):
    if request.method == \'POST\':
        img = Img(img_url=request.FILES.get(\'img\'))
        img.save()
    return render(request, \'imgUpload.html\')

新增页面templates/imgUpload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>图片上传</title>
</head>
<body>
    <form action="" method="post" enctype="multipart/form-data">
        {% csrf_token %}
        <input type="file" name="img">
        <input type="submit" value="上传">
    </form>
</body>
</html>

项目启动

(django_shop) ------------------------------------------------------------
~/Desktop/DjangoFileUpload » python manage.py runserver 0.0.0.0:8008                                                                              mosson@bogon
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
June 20, 2019 - 07:58:37
Django version 2.2.1, using settings \'DjangoFileUpload.settings\'
Starting development server at http://0.0.0.0:8008/
Quit the server with CONTROL-C.

 访问页面上传图片

到这里已经完成了。

===============================分割线  多图上传===============================

1 修改imgUpload.html 

把<input type="file" name="img">
改成<input type="file" name="img" multiple="">,就这一处而已,其他都不动

2 views.py

from DjangoFileUpload.settings import BASE_DIR

def uploadImg(request): files = request.FILES.getlist(\'img\') for f in files: destination = open(BASE_DIR + \'/media/photos/\' + f.name,\'wb+\') #上传的文件都放到/media/photos/文件夹里 for chunk in f.chunks(): destination.write(chunk) destination.close() return render(request, \'imgUpload.html\')  

OK 多图上传已经完成  

=======================码字不易,多多支持===================================