gpt4 book ai didi

python - Django 在没有 FileField 或 ImageField 和 MEDIAROOT 的特定文件夹中上传图像

转载 作者:行者123 更新时间:2023-11-28 21:38:35 24 4
gpt4 key购买 nike

我的应用程序需要在静态文件夹内的不同文件夹中上传不同的个人资料图像。还有一件事,我没有使用模型,我只是想拍摄我在 html 输入文件中选择的图片并复制到特定文件夹。

这是我的文件夹树。我要保存上传图片的地方是MYPROJECTFOLDER/static/profile/<TheUserSpecificFolder>/那是我不想使用 MEDIA_ROOT 的地方,因为在媒体根目录中我无法为每个用户创建一个特定的文件夹。 (我不知道这是否正确,如果有办法在不使用 ImageFieldFileField 的情况下为/media/文件夹中的每个用户创建特定文件夹,请告诉我)。

这是我的文件夹树:

MYPROJECTFOLDER
|
|------myproject/
|
|------myapp/
|
|------static
| |-------profile
| |------folder_user1
| |------ uploadedpicture.jpg #Here is where I want to upload
| |------folder_user2

这是我的uploadpic.html

<form action="{% url 'upload' %}" enctype="multipart/form-data" method="POST">
{% csrf_token %}
<input type="file" name="avatar" accept="image/gif, image/jpeg, image/png">
<button type="submit">Upload</button>
</form>

这是我的views.py

from django.shortcuts import render, HttpResponse, redirect
from . import forms
import os

def upload(request):
img = request.FILES['avatar']
#This just create the folder where I want to save the image.
if not os.path.exists('static/profile/' + str(request.session['user_id'])):
os.mkdir('static/profile/' + str(request.session['user_id']))

#NOW HERE IS WHERE I WANT TO WRITE THE CODE THAT SAVE THE IMAGE INTO THE FOLDER I JUST CREATED


return redirect('companyedit')

最佳答案

既然你这么说:

I don't want to use MEDIA_ROOT, becouse in media root I can't create a specific folder to each user

事实上,你可以。你问了一个similar question之前和我发布的答案允许你这样做。简单地说,是的,您可以在 MEDIA_ROOT 中为用户创建单独的文件夹。参见 this answer .


无论如何,如果您仍然想手动上传自定义文件夹中的图片,那么您可以这样做:

def upload(request):
img = request.FILES['avatar']
img_extension = os.path.splitext(img.name)[1]

user_folder = 'static/profile/' + str(request.session['user_id'])
if not os.path.exists(user_folder):
os.mkdir(user_folder)

img_save_path = "%s/%s%s" user_folder, 'avatar', img_extension
with open(img_save_path, 'wb+') as f:
for chunk in img.chunks():
f.write(chunk)

注意!

根据 dahrens 的建议在下面的评论中,以下是您应该将静态 文件和媒体 文件保存在不同位置的原因:

  1. 静态文件被认为是安全的,因为它们来自您(开发人员)- 媒体文件来自用户空间,可能需要额外注意,因此未经检查不能认为它们是安全的。
  2. 随着越来越多的用户上传文件,媒体/上传文件将不断增长。使用您当前的方法,您很可能会用完存储空间。
  3. 几乎每个严肃的网络应用程序都将上传的媒体文件托管在单独的服务器中,因此存储不会成为问题。这就是为什么将上传的图像保存在 MEDIA_ROOT 中是个好主意。因为您所要做的就是更改 MEDIA_ROOT 的值,Django 会将图像保存在那里。

关于python - Django 在没有 FileField 或 ImageField 和 MEDIAROOT 的特定文件夹中上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48036214/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com