docx_template/
request.rs

1use crate::error::DocxError;
2use reqwest::Client;
3
4/// 获取图片数据   
5/// @param client 请求客户端  
6/// @param url 图片url路径  
7/// @return (data, ext) 返回 Vec<u8>和图片扩展名  
8pub async fn request_image_data(
9    client: &Client,
10    url: &str,
11) -> Result<(Vec<u8>, String), DocxError> {
12    // 发送请求
13    let response = client.get(url).send().await?;
14    // 检查状态码
15    if !response.status().is_success() {
16        return Err(DocxError::NotImage("请求图片错误".to_string()));
17    }
18    // 获取请求头
19    let headers = response.headers().clone();
20    // 先读取头信息
21    let content_type = headers
22        .get(reqwest::header::CONTENT_TYPE)
23        .map(|h| h.to_str().unwrap_or(""))
24        .unwrap_or("");
25    // 获取内容类型以验证是否为图片
26    if !content_type.starts_with("image/") {
27        return Err(DocxError::NotImage(content_type.to_string()));
28    }
29    // 读取字节
30    let image_data = response.bytes().await?.to_vec();
31    let extension = &content_type[7..];
32    Ok((image_data, extension.to_string()))
33}