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

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

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

在公众号以前的文章里面,我们提到,如果想简单的分享一下文件,我们可以使用一行 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返回。

目录
相关文章
|
5天前
|
存储 弹性计算 运维
端到端的ECS可观测性方案,助力云上业务安全稳定
本文介绍了云原生时代保障业务系统可靠性的方法和挑战,重点探讨了阿里云ECS在提升业务稳定性、性能监控及自动化恢复方面的能力。文章分为以下几个部分:首先,阐述了业务可靠性的三个阶段(事前预防、事中处理、事后跟进);其次,分析了云上业务系统面临的困难与挑战,并提出了通过更实时的监测和自动化工具有效规避风险;接着,详细描述了ECS实例稳定性和性能问题的解决方案;然后,介绍了即将发布的ECS Lens产品,它将全面提升云上业务的洞察能力和异常感知能力;最后,通过具体案例展示了如何利用OS自动重启和公网带宽自适应调节等功能确保业务连续性。总结部分强调了ECS致力于增强性能和稳定性的目标。
|
2天前
|
弹性计算 安全 搜索推荐
阿里云国际站注册教程:阿里云服务器安全设置
阿里云国际站注册教程:阿里云服务器安全设置 在云计算领域,阿里云是一个备受推崇的品牌,因其强大的技术支持和优质的服务而受到众多用户的青睐。本文将为您介绍阿里云国际站的注册过程,并重点讲解如何进行阿里云服务器的安全设置。
|
5月前
|
安全 Ubuntu 应用服务中间件
Web服务器安全最佳实践
【8月更文第28天】随着互联网的发展,Web服务器成为了企业和组织的重要组成部分。然而,这也使得它们成为黑客和恶意软件的目标。为了确保数据的安全性和系统的稳定性,采取适当的安全措施至关重要。本文将探讨一系列保护Web服务器的最佳策略和技术,并提供一些实用的代码示例。
403 1
|
2月前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
33 2
|
2月前
|
安全 Linux API
Linux服务器安全
人们常误认为服务器因存于数据中心且数据持续使用而无需加密。然而,当驱动器需维修或处理时,加密显得尤为重要,以防止数据泄露。Linux虽有dm-crypt和LUKS等内置加密技术,但在集中管理、根卷加密及合规性等方面仍存不足。企业应选择具备强大验证、简单加密擦除及集中管理等功能的解决方案,以弥补这些缺口。
30 0
|
3月前
|
SQL 安全 网络安全
守护数字资产:服务器迁移期间的安全挑战与对策
【10月更文挑战第4天】在数字化转型的浪潮中,服务器迁移成为企业不可避免的任务。然而,迁移过程中的安全挑战不容忽视。本文从安全考量的角度,探讨了服务器迁移期间可能遇到的安全问题,并提供了相应的对策和代码示例。
108 3
|
5月前
|
云安全 弹性计算 安全
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
在使用云服务器的过程中,云服务器的安全问题是很多用户非常关心的问题,阿里云服务器不仅提供了一些基础防护,我们也可以选择其他的云安全类产品来确保我们云服务器的安全。本文为大家介绍一下阿里云服务器的基础安全防护有哪些,以及阿里云的一些安全防护类云产品。
阿里云服务器基础安全防护简介,云服务器基础安全防护及常见安全产品简介
|
5月前
|
Rust 安全 开发者
惊爆!Xamarin 携手机器学习,开启智能应用新纪元,个性化体验与跨平台优势完美融合大揭秘!
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的巨大潜力。
49 0
|
5月前
|
Rust 安全 Java
Rust语言在Web后端的应用:基于Actix-web构建高性能、安全可靠的服务器实践
【8月更文挑战第31天】随着互联网的发展,Web应用对性能和安全性要求不断提高。Rust凭借卓越的性能、内存安全及丰富生态,成为构建高性能Web服务器的理想选择。本文通过一个简单示例,展示如何使用Rust和Actix-web框架搭建基本Web服务器,从创建项目到运行服务器全程指导,帮助读者领略Rust在Web后端开发中的强大能力。通过实践,读者可以体验到Rust在性能和安全性方面的优势,以及其在Web开发领域的无限潜力。
211 0
|
5月前
|
监控 安全 网络安全
如何保护 Apache 服务器的安全
【8月更文挑战第23天】
121 0