Отправить данные из 1с на Flask сервер
Есть необходимость создать мобильное приложение, которое будет сканировать штрихкод, фотографировать и отправлять на Flask сервер. На данный момент есть следующий код на 1с:
соединение = Новый HTTPСоединение("192.168.3.143", 5000);
запрос = новый HTTPЗапрос("/test_binary");
путьКФайлу = КаталогВременныхФайлов() + "/временный.txt";
данныеФайла = Новый ДвоичныеДанные(путьКФайлу);
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
запрос.УстановитьТелоИзДвоичныхДанных(данныеФайла);
ответ = соединение.ВызватьHTTPМетод("POST", запрос);
Flask:
@app.route('/test_binary', methods=['POST'])
def test_binary():
with open('test_binary.jpeg', 'wb') as f:
f.write(request.get_data())
return "Binary data received", 201
Данный код работает и сохраняет изображение. Но не понятно как добавить несколько других изображений и/или текст/текстовый файл. Пытался использовать метод УстановитьТелоИзСтроки следующим образом:
соединение = Новый HTTPСоединение("192.168.3.143", 5000);
запрос = новый HTTPЗапрос("/test_binary");
путьКФайлу = КаталогВременныхФайлов() + "/временный.txt";
данныеФайла = Новый ДвоичныеДанные(путьКФайлу);
boundary = СтрЗаменить(Строка(Новый УникальныйИдентификатор()), "-", "");
телоЗапроса = "";
телоЗапроса = телоЗапроса + "--" + boundary + Символы.ПС;
телоЗапроса = телоЗапроса + "Content-Disposition: multipart/form-data; name=""photo"";
filename=""Autumn.jpeg""" + Символы.ПС;
телоЗапроса = телоЗапроса + "Content-Type: image/jpeg" + Символы.ПС + Символы.ПС;
телоЗапроса = телоЗапроса + данныеФайла + Символы.ПС;
телоЗапроса = телоЗапроса + "--" + boundary;
//---------------------------- Добавляю штрихкод --------------------------------
телоЗапроса = телоЗапроса + "Content-Disposition: form-data; name=""barcode"";
filename=""barcode.txt""" + Символы.ПС;
телоЗапроса = телоЗапроса + "Content-Type: text/plain" + Символы.ПС + Символы.ПС;
телоЗапроса = телоЗапроса + реквизитШтрихкод + Символы.ПС; // после сканирования, штрихкод
// сохраняется в реквизит
// нужно ли добавлять его в файл?
телоЗапроса = телоЗапроса + "--" + boundary;
запрос.УстановитьТелоИзСтроки(телоЗапроса);
ответ = соединение.ВызватьHTTPМетод("POST", запрос);
Flask:
@app.route('/test_binary', methods=['POST'])
def test_binary():
photo = request.files['photo']
photo.save('conf/extra/flask/Images/'+photo.filename)
return "Binary data received", 201
Даже без добавления Штрихкода (в коде его комментирую, здесь привел просто для примера), код не работает - возвращает ошибки 400 или 404 (Пробовал несколько вариантов отправки из 1с и по-разному принимал на Flask)
request.form и request.files не работают для меня. Как это можно исправить? и во flask и 1с?
Ответы (1 шт):
В конечном итоге использовал КоннекторHTTP:
[Github КоннекторHTTP] https://github.com/vbondarevsky/Connector/releases
Код на 1с:
путьКФайлу = КаталогВременныхФайлов() + "/временный.txt";
данныеФайла = Новый ДвоичныеДанные(путьКФайлу);
Файлы = Новый Массив;
Файлы.Добавить(Новый Структура("Имя,Данные,ИмяФайла", "photo", данныеФайла,
реквизитШтрихкод + ".jpeg"));
Данные = Новый Структура("barcode", реквизитШтрихкод);
Результат = КоннекторHTTP.Post("http://192.168.3.143:5000/post", Неопределено, Новый Структура("Файлы,Данные", Файлы, Данные));
Flask:
@app.route('/post', methods=['POST'])
def check():
photo = request.files['photo']
barcode = request.form['barcode']
return "Received", 201