一日一技:超级简单搭建更加稳定安全的文件分享服务器

简介: 一日一技:超级简单搭建更加稳定安全的文件分享服务器

摄影:产品经理必胜客的披萨比意大利的更符合中国人的口味

在公众号以前的文章里面,我们提到,如果想简单的分享一下文件,我们可以使用一行 Python 命令:

python3 -m http.server

这条命令会开启一个文件分享服务,通过在浏览器访问http://ip:8000可以看到运行这条命令的文件夹下面的全部文件。点击即可下载。如下图所示:

这种方法,确实简单。但有3个问题:

  1. 一次只能下载一个文件,如果文件比较大,在下载的过程中其他人无法下载其他文件。
  2. 当前文件夹下面的所有文件都会出现在网页上,容易导致敏感数据泄露。如果你只想让别人下载其中一个文件,你需要单独给这个文件创建一个文件夹,并在这个文件夹里面执行命令。
  3. 这个简单的网络服务不稳定。

那有没有更稳定、安全同时也不太难的方案呢?当然是有,那就是使用 fastapi。

fastapi 基于starlette 开发。而 starlette里面有一个返回类型叫做FileResponse。使用它,可以非常方便地返回文件。我们来看看代码。

首先安装三个库uvicorn/fastapi/aiofiles:

pip install uvicorn
pip install fastapi
pip install aiofiles

然后编写代码并保存为FileServer.py

import os
from fastapi import FastAPI
from starlette.responses import FileResponse
@app.get('/record/{filename}')
def get_record(filename: str):
    path = os.path.join('output', filename)
    ifnot os.path.exists(path):
        return {'success': False, 'msg': '文件不存在!'}
    response = FileResponse(path)
    return response

其中,我把所有文件都存放在当前文件夹下面的output文件夹中。用户通过访问http://ip:端口/record/文件名。服务拿到文件名以后,拼出完整的文件路径,传入FileResponse类并回response 对象。

以上就是全部代码。非常简单直观。

现在我们来运行这个文件服务:

uvicorn FileServer:app --host 0.0.0.0 --port 8888

这样,你想分享具体哪个文件,你就构造一个 URL:http://ip:8888/record/文件名发给别人。别人直接访问这个 URL 就能来下载对应的文件了。只要对方不知道其他文件的文件名,就无法看到或者下载其他文件。

如果想更安全,你还可以给每个文件做一个单独的文件编号,把编号-地址对应关系存放在数据库中。用户请求的时候,传入的是文件编号,你从数据库查出文件的真实路径再通过FileResponse返回。

目录
相关文章
|
4月前
|
安全 Ubuntu 应用服务中间件
Web服务器安全最佳实践
【8月更文第28天】随着互联网的发展,Web服务器成为了企业和组织的重要组成部分。然而,这也使得它们成为黑客和恶意软件的目标。为了确保数据的安全性和系统的稳定性,采取适当的安全措施至关重要。本文将探讨一系列保护Web服务器的最佳策略和技术,并提供一些实用的代码示例。
311 1
|
11天前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
21 2
|
2月前
|
SQL 安全 网络安全
守护数字资产:服务器迁移期间的安全挑战与对策
【10月更文挑战第4天】在数字化转型的浪潮中,服务器迁移成为企业不可避免的任务。然而,迁移过程中的安全挑战不容忽视。本文从安全考量的角度,探讨了服务器迁移期间可能遇到的安全问题,并提供了相应的对策和代码示例。
70 3
|
5月前
|
存储 监控 安全
服务器安全:构建数字时代的坚固堡垒
在数字化时代,服务器安全至关重要,它直接影响企业业务连续性和客户数据保护。服务器遭受攻击或数据泄露将给企业带来巨大损失。服务器面临网络攻击、恶意软件、内部与物理威胁。关键防护措施包括严格访问控制、数据加密与备份、安全审计与监控、部署防火墙和入侵检测系统、及时安全更新及物理安全防护。最佳实践涵盖制定全面安全策略、采用先进技术、员工培训、定期安全评估与测试及建立应急响应团队。通过这些措施,企业能构建坚实的服务器安全防护体系。
262 55
|
4月前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
4月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
45 0
|
4月前
|
Rust 安全 Java
Rust语言在Web后端的应用:基于Actix-web构建高性能、安全可靠的服务器实践
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的无限潜力。
158 0
|
4月前
|
监控 安全 网络安全
如何保护 Apache 服务器的安全
【8月更文挑战第23天】
101 0
|
5月前
|
存储 弹性计算 运维
可观测性体系问题之ECS管控的metric数据存储对安全合规的考虑如何解决
可观测性体系问题之ECS管控的metric数据存储对安全合规的考虑如何解决
30 4
|
5月前
|
安全 网络协议 网络安全
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。
SSL(Secure Sockets Layer)是一种安全协议,用于在客户端和服务器之间建立加密的通信通道。