Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django |提供两个上传图像版本-WebP和JPEG_Django_Jpeg_Amp Html_Webp - Fatal编程技术网

Django |提供两个上传图像版本-WebP和JPEG

Django |提供两个上传图像版本-WebP和JPEG,django,jpeg,amp-html,webp,Django,Jpeg,Amp Html,Webp,我只是想问你一个最佳实践,如何通过Django向用户提供WebP和JPEG图像 我有一个关于车辆的网站-每天大约有1000辆车被添加,每辆车大约有10张图片。这是很多图像。我制作了一个自定义的“import django admin命令”,用于解析车辆: 它从源代码下载一幅JPEG图像(每辆车10幅图像) 然后对所有下载的图像应用水印 之后,该图像被转换为WebP格式,并通过Djangosave()上传到图像表,该表具有车辆的外键(我使用ImageField) 然后压缩原始JPEG图像,并通过s

我只是想问你一个最佳实践,如何通过Django向用户提供WebP和JPEG图像

我有一个关于车辆的网站-每天大约有1000辆车被添加,每辆车大约有10张图片。这是很多图像。我制作了一个自定义的“import django admin命令”,用于解析车辆:

  • 它从源代码下载一幅JPEG图像(每辆车10幅图像)
  • 然后对所有下载的图像应用水印
  • 之后,该图像被转换为WebP格式,并通过Djangosave()上传到图像表,该表具有车辆的外键(我使用ImageField)
  • 然后压缩原始JPEG图像,并通过shutil.move将这些压缩的JPEG图像移动到存储WebP图像格式的同一文件夹中
  • 因为我使用的是AMP HTML,所以我可以简单地为浏览器从WebP回滚到JPEG,而浏览器不支持WebP。由于图像位于同一个/media/../文件夹中,因此它可以完美地工作

    但今天我发现,这种方法并不完美。当存在相同的图像名称时,Django在save()方法get\u random\u string()方法中,该方法会在文件末尾额外生成7个字符

    因此,我的huitl.move()方法失败:

    shutil.Error: Destination path '/home/django/exampleproject/media/2020/12/10/example-compressed-image-img01.jpg' already exists
    
    我不知道,如何计算,如何得到这个JPEG文件的相同名称-如何得到文件末尾的散列。文件名必须相同-对于WebP和JPEG,唯一的扩展名必须不同。 当然,我可以列出所有文件,找到那些散列并尝试附加它们。。。但我认为,这种方法并不完美

    最好的方法是只使用WebP图像,但不是所有浏览器都支持它。对我来说使用WebP是非常重要的,因为SEO在文件名中有关键字

    有没有更好的方法,如何将ImageField中的WebP和JPEG图像以相同的名称保存到相同的upload_to目录中(当文件名已经存在时,Django也会对其进行重命名)?我不想用两个表来表示那个或两个列,因为这是一个很大的字符串,如果我将来有10万条以上的记录,这将是大量的数据库数据


    我很乐意接受任何建议,谢谢

    我通过在文件名中插入uuid解决了类似的问题。这里有一个例子


    另一个选项是上传到S3,S3将根据需要自动创建唯一的文件名,然后对新上传的文件运行lambda函数以生成第二个图像和文件名。

    谢谢您的建议。也许我会使用这个
    uuid
    解决方案。对于S3,这将是最好的解决方案,但它确实很昂贵,因为我每天将有大约3-5GB的图像。