Ser*_*dez 2 python django image-upload django-uploads python-3.6
我的应用程序需要在静态文件夹内的不同文件夹中上传不同的配置文件图像。还有一件事,我没有使用模型,我只想拍摄我在html输入文件中选择的图片并将其复制到特定文件夹。
这是我的文件夹树。我要保存上传的图像MYPROJECTFOLDER/static/profile/<TheUserSpecificFolder>/的位置是我不想使用的位置MEDIA_ROOT,因为在媒体根目录中,我无法为每个用户创建一个特定的文件夹。(我不知道这是否正确,是否可以在/ media /文件夹中为每个用户创建一个特定的文件夹而不使用ImageField或FileField,请告诉我)。
这是我的文件夹树:
MYPROJECTFOLDER
|
|------myproject/
|
|------myapp/
|
|------static
| |-------profile
| |------folder_user1
| |------ uploadedpicture.jpg #Here is where I want to upload
| |------folder_user2
Run Code Online (Sandbox Code Playgroud)
这是我的 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>
Run Code Online (Sandbox Code Playgroud)
这是我的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')
Run Code Online (Sandbox Code Playgroud)
既然你这样说:
我不想使用MEDIA_ROOT,因为在媒体根目录中,我无法为每个用户创建一个特定的文件夹
其实可以。您之前曾问过类似的问题,而我发布的答案允许您这样做。简而言之,是的,您可以在MEDIA_ROOT中为用户创建单独的文件夹。看到这个答案。
无论如何,如果您仍然想要手动上传自定义文件夹中的图像,那么可以这样做:
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)
Run Code Online (Sandbox Code Playgroud)
根据dahrens在以下评论中的建议,以下是将静态文件和媒体文件保存在单独位置的原因:
MEDIA_ROOT。因为您要做的就是更改的值,MEDIA_ROOT并且Django会将图像保存在那里。