Ну вот мы! Онлайн хранение с нашей прекрасной колбой!
Как эта работа?
Таким образом, этот проект был всем о служебном файле с колбой и научитесь сделать какой-то HTTP-запрос!
Требования
- Колбы
- Python 3.7
Рабочее время!
Итак, сначала мы собираемся создавать приложение Flask и импортируйте некоторые вещи!
from random import sample from string import ascii_letters,digits from base64 import b64decode from json import load,dump import flask app = flask.Flask("Really Awesome Storage API!")
А также Далее мы какой-то прохладный регистратор для отслеживания пользователей, размещающих и получите некоторые файлы!
def write(ip:str,file:str): with open("list.json","r") as i: ips = load(i) if ip not in list(ips): ips[ip] = [] ips[ip].append(file) with open("list.json","w") as i: dump(ips,i) return True
Таким образом, эта функция займет два ARGS – это IP-адрес пользователя и файл! Теперь давайте напишем URL, который позволит нам загрузить вещи!
@app.route('/save',methods=['POST']) def save(): image = b64decode(flask.request.data) string = ''.join(sample(ascii_letters+digits,10)) + flask.request.headers.get("extension") a = open("stuff/" + string,"wb") a.write(image) a.close() write(flask.request.remote_addr,f"POST {string}") return string ,202
Теперь эта функция будет работать, если вы отправитесь на Сохранить
уваживание Так что это примет файл, который был базой 64, закодированным в органе отклика, и он собирается создать файл и написать байты после того, как мы закрываем файл и регистрируем файл после этого, мы вернем случайную строку с расширением файла, которое хранилище в нашем Сервер! Теперь давайте напишем путь URI, который отправит файл обратно!
@app.route('/') def get(pic): try: a = flask.send_file("stuff/" + pic,as_attachment=True if flask.request.args.get("preview") is not None or flask.request.args.get("preview") == "false" else False) write(flask.request.remote_addr,f"GET {pic} FILE ") except Exception as e: return str(e) else: return a
Эта функция как-то дольше, чем то, что вы, возможно, ожидали, но мы попробуем эту флюшку отправим файл обратно к пользователю, потому что Flask будет бросать ошибку, если файл не существует, и мы делаем ошибку, и если ошибка поднять ошибку, мы вернемся к странице еще затем вернуть файл! ( Функция отправки файла действительно обескуражен! Пожалуйста, используйте send_from_directory, делая это!
@app.route('/') def get(pic): try: a = flask.send_from_directory("stuff",pic) write(flask.request.remote_addr,f"GET {pic} FILE ") except Exception as e: return str(e) else: return a
Я использую это, потому что у него есть as_attachment
АРУДА! ) Это так просто! Теперь давайте напишем клиентский скрипт бокового клиента! Каждый может сделать, чтобы я дам вам этот фрагмент
from requests import post from base64 import b64encode from PIL import ImageGrab from sys import exit from os import remove from os.path import splitext while True: choices = input("Screenshot (s) or File (f) or Clipboard Text(ct) or Text (t) or Quit (q)\n") if "s" in a or "S" in choices: screen = ImageGrab.grabclipboard() screen.save("pic.jpg") print("Your screenshot is at https://content.biomooping.tk/" + post("yourlink/save",data=b64encode(open("pic.jpg","rb").read()),headers={"extension":splitext("./pic.jpg")[1]}).text) remove("pic.jpg") elif "f" in a or "F" in choices: path = input("Your file path\n") print("Your file is at is at https://content.biomooping.tk/" + post("yourlink/save",data=b64encode(open(path,"rb").read()),headers={"extension":splitext(path)[1]}).text) elif choices.startswith("ct") or choices.startswith("CT"): from clipboard import paste print("Your file is at is at https://content.biomooping.tk/" + post("yourlink/save",data=b64encode(paste()),headers={"extension":"txt"}).text) elif choices.startswith("T") or choices.startswith("t"): print("Your file is at is at https://content.biomooping.tk/" + post("yourlink/save",data=b64encode(bytes(input("Text\n\a"),encoding="utf-8")),headers={"extension":"txt"}).text) elif "q" in a or "Q" in choices: exit("See you next time!") else: continue
Это имеет особенность является
- Получить скриншот из буфера обмена
- Загрузка файлов
- Текст буфера обмена (в работе Windows, но другой ОС? я не знаю…..)
- Текст
Немного вопроса
Q: Почему кодировка Base64? A: Это простое, что Я знаю
Q: Что вдохновляет вас сделать это? A: Я всегда забываю, какова моя домашняя работа, поэтому я хочу, чтобы зарегистрирован, и я хочу воспроизводить с колбой, а также хочу онлайн-хранилище, размещенное в Интернете. Репозиторий GitHub!
Оригинал: “https://dev.to/dumbstuff/online-storage-with-flask-12k6”