django - 如何获取将图像上传到 s3 存储桶的文件名?
问题描述
您好,我在将文件添加到 s3 存储桶时遇到问题....
我正在分享我的模型
class UserProfile(SoftDeletionModel, BaseModel):
user = models.ForeignKey(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=100, blank=True)
contact_number = models.CharField(max_length=20, blank=True)
profile_pic=models.TextField(blank=True, null=True)
这是我的序列化程序类
class UserprofileSerializer(ModelSerializer):
class Meta:
model = UserProfile
exclude = ['deleted_at','created_date','modified_date']
extra_kwargs = {'user': {'required': False}}
这是我的看法
class UserProfileUpdateView(UpdateAPIView):
def get_queryset(self, *args, **kwargs):
queryset_list = UserProfile.objects.filter(
user=self.request.user)
return queryset_list
serializer_class = UserprofileSerializer
我面临的问题是.....作为图像上传的个人资料图片......但在我的模型中它创建为一个文本字段,用于保存 s3 存储桶代理 url......
我需要获取用于在 s3 存储桶中创建路径的文件名......
那么我该怎么做呢?
解决方案
您可以request.FILES['profile_pic']
在此处使用“profile_pic”是您要上传的输入字段名称。
image = request.FILES['profile_pic']
那么你可以使用image
object 作为Body
S3 的参数。假设您编写了一个upload_to_s3
使用 boto3 将图像上传到 S3 的函数。
profile_pic
从序列化程序中排除。更改您的代码如下:
def upload_to_s3(image_object): // upload to s3 and get url using boto3 return url class UserProfileUpdateView(UpdateAPIView): serializer_class = UserprofileSerializer def perform_update(self, serializer): image = request.FILES['profile_pic'] serializer.validated_data['profile_pic'] = upload_to_s3(image) serializer.save()
将profile_pic
字段类型转换为URLField()
推荐阅读
- json - 仅当 JMESPATH 条件为真时获取 JSON 元素的查询
- mysql - 我怎样才能将值设置得更高
- embedded - 在 STM32 B-L072Z-LRWAN1 板中同时使用 SPI 和 I2C 时的问题
- android - 如何使用 exifinterface 将方向数据直接写入图像缓冲区(或旋转图像本身)?
- google-sheets - 在 Google 表格的范围内的每一列中查找最大值、中值和最小值
- python - 使用 Frida 跟踪 CCCrypt 调用
- java - 为什么我的基数排序 JAVA 实现比快速排序慢?
- angular - Angular - 如何在急切加载和延迟加载的模块中共享 b/w 数据?
- node.js - 数组推送功能在nodejs中不起作用
- imagemagick - 使用 ImageMagick 将具有多页页面 tiff 文件的文件夹转换为 pdf