1

所以我做了一个画廊网页,支持一次上传多张图片。问题是我已经做到了,因此任何上传的图像都会获得像 [username]_[unix timestamp].jpg 这样的文件名

查看所有上传的图像时,图像按日期排序。最初,当上传大量图像时,这是一个问题,因为它们都有非常相似的日期时间戳。下降到同一秒。我使用 get_next_by_date() 和 get_previous_by_date() 来浏览图像,当许多图像存储到同一秒时,这并不能很好地工作。

另一个问题是,由于图像处理通常以每秒三张图像的速度完成,因此三张和三张图像获得相同的 unix 时间戳。这导致在第二个中第一个处理的相同图像在站点上显示三次,而不是在同一秒后处理的其他图像。(当操作系统发现文件名已被使用时,它给文件一个不同的名称,但数据库仍将原始时间戳存储到文件名中)。

到目前为止,我已经通过在处理每个图像后弹出 time.sleep(1) 来“解决”问题,以保证为每个图像启动一个新的秒,但这只是让我感觉很糟糕。然后保证要上传 60 张图像需要 60 秒,而它不应该超过 10-20 秒。

谁能想到解决这个问题?如何确保按日期排序的图像在查看图像时可以获得正确的顺序,并且所有图像的 unix 时间戳都是唯一的?

4

3 回答 3

1

最安全的方法是在您的文件名中添加一个哈希。这也可以防止攻击者猜测您的文件名,这通常是一件好事。

def upload_to_name(instance, filename):
    name = hashlib.sha1(str(instance.id) + str(random.random())).hexdigest()
    return 'path_to_the_folder/%s.%s' % (path, name, filename.split('.')[-1])
于 2012-08-21T12:08:07.647 回答
0

将毫秒添加到时间戳。如果它没有帮助 - 将图像哈希添加到文件名。

于 2012-08-21T10:54:14.703 回答
0

您也可以使用毫秒从时间戳创建文件名。

使用strftime毫秒为文件名创建字符串:

>>>import datetime from datetime
>>>date1=datetime.utcnow()
>>>date1.strftime("%Y_%m_%d_%H_%M_%S_%f")
'2012_08_21_05_55_25_302249'
于 2012-08-21T11:06:15.853 回答