Отправить данные из 1с на Flask сервер

Рейтинг: 0Ответов: 1Опубликовано: 05.05.2023

Есть необходимость создать мобильное приложение, которое будет сканировать штрихкод, фотографировать и отправлять на 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