Web Secret:图片服务(一)——构建一个基本的图片服务

本文探讨了如何构建一个基础的图片服务,包括选择上传目录、处理上传请求、存储图片及返回URL。同时提出了针对图片服务的优化建议,如分离应用和图片存储、按业务分目录、限制文件大小和类型、服务器端压缩图片以及文件散列存储策略。后续篇章将继续深入讨论图片服务的扩展和性能提升。
摘要由CSDN通过智能技术生成

Web Secret:图片服务

(一)构建一个基本的图片服务

         选择这个主题是因为太过简单,简单到你甚至会在设计中忽略这个主题,哪个网站不需要图片呢,又有哪个网站完全不支持用户上传图片,可是我们又有多少人真正考虑过图片上传的事情呢?我们就以一个典型的SNS或者论坛来说,至少会有这么几个情况你需要使用到图片:

n  应用程序需要使用到的背景图、图标和一些界面修饰

n  用户个人的头像,一般来说会有缩略图和头像图

n  用户个人相册,允许用户上传一定的个人照片

n  文章/博客中的图片

n  ……

假设我们的网站叫着www.websecretapp.com ,现在我们来看最简单的处理方法:

1.       在网站的根目录下建立一个名为Upload的目录,也就是http://websecretapp.com/upload

2.       http://www.websecret.com/photoupload 提供图片上传的处理,您可以选择自己熟悉的任何语言,当然了,photoupload.php,photoupload.jsp,photoupload.aspx等等都可以。

### 使用 Actix-web 和 OAuth2 的教程 #### 创建 Web 应用程序并设置依赖项 为了构建基于 `actix-web` 并集成了 OAuth2 认证的应用程序,首先需要初始化一个新的 Rust 项目,并在 `Cargo.toml` 文件中添加必要的依赖项: ```toml [dependencies] actix-web = "4" serde = { version = "1", features = ["derive"] } serde_json = "1" reqwest = { version = "0.11", features = ["json", "blocking"] } openssl = "0.10" ``` 这些依赖项用于处理 HTTP 请求、序列化 JSON 数据以及发起外部请求。 #### 配置 OAuth2 客户端 接下来,在应用程序中配置 OAuth2 客户端。这通常涉及定义客户端 ID、客户端密钥以及其他必要参数。这里展示如何利用 `openidconnect` crate 来简化这一过程[^2]: ```rust use openidconnect::{AuthUrl, ClientId, ClientSecret}; // ...其他导入语句... let client_id = ClientId::new(String::from("your_client_id")); let client_secret = Some(ClientSecret::new( String::from("your_client_secret"), )); let auth_url = AuthUrl::new("https://example.com/oauth/authorize".to_string()) .expect("Invalid authorization endpoint URL"); // 设置 token 端点和其他选项... ``` 此部分代码片段展示了如何创建一个 OAuth2 客户端实例,其中包含了认证所需的各项信息。 #### 构建路由处理器 随后,编写两个主要的路由处理器——一个是用来重定向用户至第三方认证页面;另一个则是处理来自认证服务器返回的数据。下面是一个简单的实现方式[^1]: ```rust async fn authorize(req: HttpRequest) -> impl Responder { // 处理 /auth/login GET 请求,生成授权链接并将用户重定向过去 } #[post("/callback")] async fn callback(query: web::Query<HashMap<String, String>>) -> HttpResponse { // 接收回调中的 code 参数,交换为 access_token, // 解析 id_token 或者获取用户资料等操作。 } ``` 这两个函数分别对应于 `/auth/login` 和 `/callback` 这两条路径下的逻辑处理。前者负责构造指向认证提供商的身份验证 URI 并执行重定向动作;后者则接收由认证服务传递回来的信息(如授权码),进而完成后续流程。 #### 启动应用 最后一步就是启动整个应用程序了。可以通过如下所示的方式运行该服务[^3]: ```rust #[actix_web::main] async fn main() -> std::io::Result<()> { HttpServer::new(|| { App::new() .service(web::resource("/auth/login").route(web::get().to(authorize))) .service(callback) }) .bind(("127.0.0.1", 8080))? .run() .await } ``` 这段代码设置了基本服务结构,绑定了本地 IP 及端口,并注册了之前提到过的两个 API 终结点。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值