Redis Hash - как сохранить звуковой файл? - PullRequest
0 голосов
/ 04 января 2019

Может кто-нибудь подсказать, как сохранить файл в redis? Я хотел бы иметь возможность сделать что-то вроде:

 hmset 12345 sound_bytes <pathtofile/filename.mp3>

в качестве примера.

Я использую python, поэтому мне нужно будет открыть mp3-файл, используя python, сохранить его как байтовый массив, который я предполагаю (?), А затем сохранить этот байтовый массив в redis.

Я знаю, что могу открыть файл, например, в python:

with open(filename, 'rb') as fd:
    contents = fd.read()

Но если бы мне нужно было как-то сохранить «содержимое» в REDIS, когда я позже извлеку его, чтобы фактически воспроизвести или передать обратно через метод REST, есть ли что-нибудь еще, что нужно сделать? Что мне нужно сделать, чтобы Python «распознал» это как звуковой файл, а не просто строку?

Я никогда не пробовал что-то подобное раньше, поэтому любые указатели или ошибки были бы оценены

РЕДАКТИРОВАТЬ 1

Пока что это код, с которым я играю:

14 def sound_file_to_bytes(pathtofile):
15     try:
16         with open(pathtofile, 'rb') as fd:
17             contents = fd.read()
18             logging.info(contents)
19             fd.close()
20             return contents
21     except Exception as ex:
22         return "Error:", ex
23
24 def sound_as_bytes_to_db(soundbytes):
25     try:
26         logging.info('attempting to save sound bytes')
27         my_redis = redis.Redis(connection_pool=POOL)
28         response = my_redis.hmset('55555', 'greeting', soundbytes)
29         logging.info(response)
30         return True
31     except Exception as ex:
32         return False

Через журнал я вижу, что содержимое файла считывается в мою переменную. Я не получаю никаких ошибок, когда пытаюсь развернуться и записать в базу данных, но содержимое значения «приветствия» в моем SET пусто. Обратите внимание на вывод redis ниже:

127.0.0.1:6379[5]> hgetall 55555
1) "email1"
2) "johndoe@hotmail.com"
3) "email2"
4) "jd@yahoo.com"
5) "greeting"
6) ""
127.0.0.1:6379[5]>

РЕДАКТИРОВАТЬ 2

Я выяснил, почему он не сохранял содержимое в базе данных. У меня была проблема с синтаксисом команды hmset. теперь код выглядит так:

  28         response = my_redis.hmset('55555',{'greeting':soundbytes})
...