如何使用 Rocket 网络框架 proxy/forward 数据?

How can I proxy/forward data using the Rocket web framework?

我有一个 link 的列表,我想从中随机提供数据,就好像用户自己手动转到 url 一样。这些 content/file 类型并不完全相同,但是它们都是图像(jpeg 和 png)(理想情况下我想对任何文件类型执行此操作,而不仅仅是 jpeg 和 png 或只是图像)。我知道我可以像这样直接将它们作为八位字节流提供,但这会导致文件被下载,而不是内联显示。我考虑过根据 link 扩展更改内容类型,但我找不到任何关于如何使用编译时未知的内容类型的信息。我也觉得可能有比这更好的方法。 How to forward data from a reqwest::blocking::Body in a Rocket responder? 好像和我的问题有些相似,不过文件类型总是png。我正在使用 v0.5-rc 的火箭。

#[get("/rand_img")]
async fn get_img() -> Vec<u8> {
    let vs = vec![
        "https://www.publicdomainpictures.net/pictures/320000/velka/background-image.png",
        "https://www.publicdomainpictures.net/pictures/410000/velka/cobalt-city-1.png",
        "https://www.publicdomainpictures.net/pictures/60000/velka/went-boating.jpg",
        "https://www.publicdomainpictures.net/pictures/30000/velka/paulino-nacht.jpg"
    ];
    let choice = vs.choose(&mut rand::thread_rng()).unwrap();
    let response = reqwest::get(*choice).await.unwrap().bytes().await.unwrap();
    response.to_vec()
}

我最终下载了图像数据,将其存储在内存中,并返回了内容类型和图像数据。

    let imager = reqwest::get(&link)
        .await
        .expect("unable to fetch image")
        .bytes()
        .await
        .unwrap();
    let ext = &link.chars().rev().collect::<String>()[0..3] // this is really bad, i should split by `.` instead
    .chars()
    .rev().collect::<String>();
    return (ContentType::from_extension(ext).unwrap(), imager.to_vec())