Получение тех же результатов, что и чтение из локального пространства, путем обработки файлов непосредственно через буфер - PullRequest
0 голосов
/ 05 июня 2019

Это веб-приложение, разработанное на Python 3.7 с Django. Требуется получить аудиофайлы от пользователя, после чего файл будет обработан методом Base64UrlEncode и отправлен в сторонний API.

API принимает только обработанный файл результатов, считанный из io.BufferedReader. Текущий метод работы - сохранить файл в локальном пространстве сервера, открыть его, затем прочитать через io.BufferedReader и обработать возвращаемое значение, чтобы получить файл результата. После того, как API успешно примет файл, он будет удален.

Есть ли способы, которыми мне не нужно открывать файл из локального пространства сервера, вместо этого, непосредственно обрабатывая его через буфер?

Я попытался использовать InMemoryUploadedFile.read (), а затем обработать его с помощью Base64UrlEncode, но API не принимает его.

Это рабочий код, API принимает отправленный ему файл:

def getBody(filepath):
binfile = open(filepath, 'rb')
data = {'audio': base64.b64encode(binfile.read())}
print(data)
print('data:{}'.format(type(data['audio'])))
# print("type(data['audio']):{}".format(type(data['audio'])))
return data


aue = "raw"

engineType = "sms16k"

audioFilePath = r"C:\Users\HiWin10\Desktop\pytes\tessstdd.wav"
r = requests.post(URL, headers=getHeader(aue, engineType), data=getBody(audioFilePath))

Я пытался изменить

binfile = open(filepath, 'rb')
data = {'audio': base64.b64encode(binfile.read())}

до

binfile = request.FILES.get('upfile')
data = {'audio': base64.b64encode(binfile.read())}

API не принимает его, потому что два bin-файла являются разными объектами.

Ожидается, что это приложение будет работать на Centos 7.3 и Windows 10.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...