Создание персонального файлового хранилища

RedDeveloper
17.03.2022 22:11
Создание персонального файлового хранилища

Вы когда-нибудь хотели поделиться с кем-то файлом, но он содержал конфиденциальную информацию? Многие думают, что электронная почта безопасна, но это не так. Существуют такие сервисы, как DropBox и Google Drive, но кто знает, что произойдет с файлом после того, как вы его удалите, ведь у вас нет полного контроля. Вот механизм, который я лично использую. безопасность через серьезную неясность и это одноразовая загрузка. Давайте начнем!

Необходимые условия

1. Настройте веб-сервер.

Узнайте больше о Compute и другой документации Oracle Cloudздесь. Для получения интерактивной поддержки и сообщества посетите публичный канал Oracle Slack для разработчиков.

Настройка File Drop

1. Теперь, когда у вас созданы все необходимые условия для работы веб-сервера, вместо запуска server.py мы будем использовать filedrop.py. Скопируйте filedrop.py на ваш экземпляр Compute:

scp vidserver.py opc@${INSTANCE_IP}:/home/opc

filedrop.py

# Python 3 file drop example#
Run: python3 server.pyfrom
http.server import BaseHTTPRequestHandler, HTTPServerimport
time
import os
import argparse

parser = argparse.ArgumentParser(description="File drop.")
parser.add_argument("ip", type=str)
parser.add_argument("port", type=int, default=2022)
parser.add_argument("filename", type=str)
parser.add_argument("droppath", type=string)
parser.add_argument("dropname", type=string)
parser.add_argument("dropvalue", type=string)
args = parser.parse_args()

address = (args.ip, args.port)
filename = args.filename
droppath = args.droppath
dropname = args.dropname
dropvalue = args.dropvalue

print("IP=" + args.ip)
print("Порт=" + str(args.port))
if os.path.exists(filename):
print("Filename=" + filename)
print("Path=" + droppath)
print("Name=" + dropname)
print("Value=" + dropvalue)

class MyServer(BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "application/octet-stream")
self.send_header("Content-Disposition", "attachment; filename=" + filename)
self.end_headers()

path = self.path
name = ""
value = ""

if '?' in path:
path, args = path.split('?', 1)
name, value = args.split('=', 1)

if path == "/" + droppath and name == dropname and value == dropvalue:
fo = open(filename, "rb")
self.wfile.write(fo.read())
fo.close()
print("success")

os.remove(filename)

print(path, name, value)
return

if __name__ == "__main__":
webServer = HTTPServer(address, MyServer)
print("Server started http://%s:%s" % address)

try:
webServer.serve_forever()
except KeyboardInterrupt:
pass

webServer.server_close(
)print("Сервер остановлен.")

1. Соберите несколько переменных:

**INSTANCE_IP** - У вас есть эта переменная, полученная ранее при выполнении предварительных условий для веб-сервера.
**Порт** - Вы получили это из предварительных условий веб-сервера ранее.
**Имя файла** - Это файл, к которому вы хотите предоставить общий доступ.
**PathToFile** - Это место расположения файла на вычислительном экземпляре.
**Имя** - Это просто случайная строка, которую вы придумаете сами.
**Значение** - То же, что и Имя выше.
**PrivateIP** - Это частный IP-адрес вашего сервера.

![](images/privateip.png)

1. Скопируйте ваш файл на вычислительный экземпляр:

``console
scp -i ~/.ssh/oci_id_rsa foo.zip opc@${INSTANCE_IP}:/home/opc
```

1. запустите сервер

``console
sudo python3 server.py <PrivateIP> <Port> <Filename> <PathToFile> <Name> <Value> &
``''

Например:

``console
scp foo.zip ocp@1.2.3.4:/home/pi
sudo python3 filedrop.py 1.2.3.4 8100 foo.zip chris knockknock whothat &
`` ''

1. С любого компьютера используйте веб-браузер и зайдите по url `http://<YourPublicIP>:<Port>/PathToFile?Name=Value` для загрузки файла.

Например:

``console
http://<YourPublicIP>:8100/chris/foo.zip?
knockknock=whothat``.

Файл будет загружен, а затем удален с виртуальной машины. При любой попытке доступа к неверному URL файл будет удален. Поделитесь этим URL с тем, кто хочет скачать файл.

Что меня радует: Я могу отправить URL по частям, а другой человек должен собрать его правильно, но если он не справится, файл будет удален. Это может быть неприятно, поэтому я обычно звоню по телефону, если выбираю этот вариант. Я доверяю "безопасности через неизвестность" в этом ограниченном случае, но я предпочитаю, чтобы это происходило в режиме реального времени, насколько это возможно. Выбор за вами, но я решил поделиться с вами, потому что отправлять конфиденциальную информацию по электронной почте - не самая лучшая идея.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML

15.07.2022 14:37

Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно является внешний метод. Это помогает сохранить код незагроможденным и организованным. Однако ситуация может диктовать использование двух других методов....

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly

16.05.2022 21:25

Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату, категорию, пол, местоположение, рейтинг, должность, страну, штат и т.д... и даже после заполнения всех этих данных вам будет предложена капча, которую...

Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)

18.04.2022 13:17

Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно использовать выбранный нами фреймворк, и он становится основным подходом к каждому новому продукту. Однако существует и другой подход к разработке. Вы...

Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React

13.04.2022 15:26

Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей. Первое, что вам нужно сделать, это установить гем Flatpickr через npm. Вы можете найти эту информацию на их сайте или просто использовать следующий код:

В чем разница между Promise и Observable?
В чем разница между Promise и Observable?

11.04.2022 20:00

Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.

Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса

08.04.2022 19:39

Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.