首页 > Web开发 > 详细

Django图片的上传与下载

时间:2020-06-14 19:08:23      阅读:68      评论:0      收藏:0      [点我收藏+]

简单的记录下搭建网站时用到的图片上传与下载

settings中配置文件路径

# global_settings

# 指定上传文件的存储路径(相对路径,用于读取文件)
MEDIA_URL = /media/

# 指定上传文件的存储路径(绝对路径,用于存储文件)
MEDIA_ROOT = os.path.join(BASE_DIR, media)

urls

from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path(admin/, admin.site.urls),
    url(r^student/,include(stu.urls))
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

子 urls

#coding=utf-8
from django.conf.urls import url
from stu import views

urlpatterns=[
    url(r^$,views.index_vies),
    url(r^upload/$,views.upload),
    url(r^show/$,views.show),
    url(r^download/$,views.download)
]

templates

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/student/upload/" method="POST" enctype="multipart/form-data">
        <p>姓名:<input type="text" name="username"/></p>
        <p>头像:<input type="file" name="photo"/></p>
        <p>&emsp;&emsp;&emsp;<input type="submit" value="上传"/></p>
    </form>
</body>
</html>
index.html
技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table width="300px" border="1" cellspacing="0">
        <tr>
            <th>编号</th>
            <th>姓名</th>
            <th>头像</th>
            <th>操作</th>
        </tr>
        {% for stu in stus %}
         <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ stu.sname }}</td>
            <td><img style="width: 100px" height="100px" src="/media/{{ stu.photo }}"/></td>
            <td><a href="/student/download/?photo={{ stu.photo }}">下载</a></td>
         </tr>
        {% endfor %}
    </table>
</body>
</html>
show.html

models

from django.db import models


class Student(models.Model):
    sno = models.AutoField(primary_key=True)
    sname = models.CharField(max_length=32)
    photo = models.ImageField(upload_to="imgs")

    def __str__(self):
        return uStudent:%s % self.sname

views

from django.http import HttpResponse
from django.shortcuts import render
import os
from stu.models import *


# 原生方式上传图片
def index_vies(request):
    if request.method == "GET":
        return render(request, "index.html")
    else:
        name = request.POST.get("username")
        photo = request.FILES.get("photo")
        if not os.path.exists(static):
            os.makedirs("static")

        with open(os.path.join(os.getcwd(), "static", photo.name), "wb") as fw:
            fw.write(photo.read())
        return HttpResponse("上传成功")
    return None


# Django上传图片
def upload(request):
    name = request.POST.get("username")
    photo = request.FILES.get("photo")
    # 数据入库
    Student.objects.create(sname=name, photo=photo)
    return HttpResponse("上传成功")


# 展示图片
def show(request):
    # 获取学生信息
    stus = Student.objects.all()
    return render(request, "show.html", {"stus": stus})


# 下载图片
def download(request):
    # 获取文件存储位置
    filepath = request.GET.get("photo")# 获取文件名  imgs/aa.png
    filename = filepath[filepath.rindex("/") + 1:]# 获取文件的绝对路径
    path = os.path.join(os.getcwd(), "media", filepath.replace("/", "\\"))
  
    with open(path, "rb") as fr:
        response = HttpResponse(fr.read())
        response["Content-Type"] = "image/png"
        response["Content-Disposition"] = "inline;filename=" + filename
    return response

技术分享图片

 

Django图片的上传与下载

原文:https://www.cnblogs.com/wakey/p/13125570.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!