如何使用 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())
我有一个 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())