繁体   English   中英

如何上传多张图片到Django?

[英]How to upload multiple images to Django?

我正在尝试从客户端发送一些数据(react native),其中包含一些图像,所以我将它们 append 发送到 formdata 并通过 post 请求成功发送它,但我无法弄清楚如何在服务器端处理它。

我的反应代码:

const post = async () => {
    const token = await getToken();
    const [description, setDescription] = useState('');

    const formData = new FormData();

    images.forEach((image) => {
      formData.append(`images`, {
        uri: image,
        type: 'image/jpeg',
        name: image,
      });
    });
    formData.append('description', description);
    console.log('formdata:', formData);

    try {
      await axios.post(URL, formData, {
        headers: {
          'Content-Type': 'multipart/form-data',
          Authorization: token,
        },
      });
    } catch (e) {
      console.log(e);
    }
  };

当我在客户端控制台记录表单数据时,我得到:

formdata: [["images", {"name": "/Library/Developer/CoreSimulator/Devices/123.jpg", "type": "image/jpeg", "uri": "/Library/Developer/CoreSimulator/Devices/123.jpg"}], ["images", {"name": "/Library/Developer/CoreSimulator/Devices/456.jpg", "type": "image/jpeg", "uri": "/Library/Developer/CoreSimulator/Devices/456.jpg"}], ["description", "Test"]]

在我的服务器端(django/drf):

模型.py:

class Post(models.Model):
    user_id = models.ForeignKey(
        User, on_delete=models.CASCADE, default=None
    )
    images = models.FileField(
        max_length=3000, default=None, null=True, blank=True, upload_to='media/post_images')
    description = models.TextField(null=False, default=None)
    date = models.DateTimeField(editable=False, auto_now_add=True)

序列化程序.py:

class PostSerializer(serializers.ModelSerializer):
    images = serializers.FileField()

class Meta:
    model = Post
    fields = "__all__"

视图.py

class PostView(APIView):
    serializer_class = PostSerializer
    parser_classes = (MultiPartParser, FormParser)

def post(self, request, format=None):

    form_data = request.data

    images = form_data.get('images')
    description = form_data.get('description')
    user_id = self.request.user

    print(form_data)

    post = Post.objects.create(
        images=images, description=description, user_id=user_id)

    post.save()

    serializer = PostSerializer(post)

    return Response(serializer.data, status=status.HTTP_201_CREATED)

当我在 python 中打印 form_data 时,我得到:

<QueryDict: {'0': ['images'], '1.uri': ['/Library/Developer/CoreSimulator/Devices/123.jpg'], '1.type': ['image/jpeg'], '1.name': ['/Library/Developer/CoreSimulator/Devices/123.jpg'], '1.0': ['images'], '1.1.uri': ['/Library/Developer/CoreSimulator/Devices/456.jpg'], '1.1.type': ['image/jpeg'], '1.1.name': ['/Library/Developer/CoreSimulator/Devices/456.jpg'], '2.0': ['description'], '2.1': ['Test']}>

如何提取数据并将其保存到数据库?

Django 正在为您处理。 您可以尝试使用以下方式访问您的图像:

request.FILES.getlist("images")

这将为您提供在提交的表单中找到的所有图像的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM