簡體   English   中英

Django保存上傳的文件

[英]Django save uploaded file

我想上傳一個文件,可以使用下面的代碼完成操作,但是我還需要將所有上傳文件保存在不同名稱的文件夾中。 如果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})

給你一個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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM