Django保存上传的文件
Posted
技术标签:
【中文标题】Django保存上传的文件【英文标题】:Django save uploaded file 【发布时间】:2018-04-24 06:43:56 【问题描述】:我想上传一个文件,我可以用下面的代码做些什么,但我还需要将所有上传的文件保存在不同名称的不同文件夹中。如果 2 个用户从浏览器上传相同的文件,则在文件夹中应使用不同的名称或唯一标识号保存。 以下是我的代码:
views.py
from django.shortcuts import render
import openpyxl
def index(request):
if "GET" == request.method:
return render(request, 'myapp/index.html', )
else:
excel_file = request.FILES["excel_file"]
# you may put validations here to check extension or file size
wb = openpyxl.load_workbook(excel_file)
# getting all sheets
sheets = wb.sheetnames
print(sheets)
# getting a particular sheet
worksheet = wb["Sheet1"]
print(worksheet)
# getting active sheet
active_sheet = wb.active
print(active_sheet)
# reading a cell
print(worksheet["A1"].value)
excel_data = list()
# iterating over the rows and
# getting value from each cell in row
for row in worksheet.iter_rows():
row_data = list()
for cell in row:
row_data.append(str(cell.value))
print(cell.value)
excel_data.append(row_data)
return render(request, 'myapp/index.html', "excel_data":excel_data)
【问题讨论】:
【参考方案1】:给你一个Django FileField方式实现:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
suffix = filename[filename.rindex(".")+1:]
return 'upfiles/0/1.2'.format(instance.user.username, get_randomfilename(),suffix)
class Picture(models.Model):
user = models.ForeignKey(User,on_delete=models.CASCADE)
file = models.ImageField(upload_to=user_directory_path)
date_added = models.DateTimeField(auto_now_add=True)
@parser_classes((MultiPartParser,))
@permission_classes((IsAuthenticated, ))
def upload_picture(request):
'''
:input :"file":f
:return:"id":pictureId
'''
if "file" in request.FILES:
f = request.FILES["file"]
picture = Picture()
picture.user= request.user
picture.file = f
picture.save()
return Response(data="id":picture.id)
else:
return Response(,status=status.HTTP_400_BAD_REQUEST)
【讨论】:
@Hyaden 这个文件应该在views.py或者models.py中? 不,你可以在任何可以访问模型对象的地方访问它。实际上你可以在批处理脚本中访问它,包括django env setup。文件存储在硬盘或其他媒体存储后端跨度> 其实我对 Django 还是很陌生,你能帮我用更简单的解决方案吗 你在哪个国家? 你能帮帮我吗?以上是关于Django保存上传的文件的主要内容,如果未能解决你的问题,请参考以下文章