import os import subprocess import shlex from flask import Flask, flash, request, redirect, make_response, url_for from werkzeug.utils import secure_filename app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def upload_file(): if request.method == 'POST': # check if the post request has the file part if 'file' not in request.files: flash('No file part') return redirect(request.url) if 'data' not in request.form: flash("No string input") file = request.files['file'] if file: if file.filename == '': flash('No selected file') return redirect(request.url) try: binary = subprocess.check_output( "./bmpencode /dev/stdin /dev/stdout {}".format(shlex.quote(request.form['data'])), stdin=file.stream, stderr=subprocess.PIPE, shell=True ) response = make_response(binary) response.headers.set('Content-Type', 'image/bmp') response.headers.set('Content-Disposition', 'attachment', filename='encoded.bmp') return response except subprocess.CalledProcessError as e: return e.stderr return '''