为什么使用 Reqwest 的 .text() 方法下载的图像会损坏?
Why are images downloaded with Reqwest's .text() method broken?
如何使用 Reqwest 正确地检索某些网站上的图像并将其保存到本地?我已经尝试使用 .text()
,但图像已损坏。
Error interpreting JPEG image file (Not a JPEG file: starts with 0xef 0xbf)
我试过的代码
extern crate reqwest;
use std::error::Error;
use std::fs::File;
use std::io::prelude::*;
use std::path::Path;
fn main() {
let mut image_file = reqwest::Client::new()
.get("https://images.pexels.com/photos/2124773/pexels-photo-2124773.jpeg")
.send()
.unwrap()
.text()
.unwrap();
let path = Path::new("tmp/img_test.jpeg");
let display = path.display();
let mut file = match File::create(&path) {
Err(why) => panic!("couldn't create {}: {}", display, why.description()),
Ok(file) => file,
};
match file.write_all(image_file.as_bytes()) {
Err(why) => panic!("couldn't write to {}: {}", display, why.description()),
Ok(_) => println!("successfully wrote to {}", display),
}
}
不要使用 text
,它用于文本,因此会尝试解码原始字节。
只写 response, which implements Into<Body>
where Body
是一个流(这也比获取字节更有效率):
let mut client = reqwest::Client::new();
let mut image_file = client
.get("https://images.pexels.com/photos/2124773/pexels-photo-2124773.jpeg")
.send()
.unwrap();
let path = Path::new("img_test.jpeg");
let display = path.display();
let mut file = match File::create(&path) {
Err(why) => panic!("couldn't create {}: {}", display, why.description()),
Ok(file) => file,
};
match std::io::copy(&mut image_file, &mut file) {
Err(why) => panic!("couldn't write to {}: {}", display, why.description()),
Ok(_) => println!("successfully wrote to {}", display),
}
如何使用 Reqwest 正确地检索某些网站上的图像并将其保存到本地?我已经尝试使用 .text()
,但图像已损坏。
Error interpreting JPEG image file (Not a JPEG file: starts with 0xef 0xbf)
我试过的代码
extern crate reqwest;
use std::error::Error;
use std::fs::File;
use std::io::prelude::*;
use std::path::Path;
fn main() {
let mut image_file = reqwest::Client::new()
.get("https://images.pexels.com/photos/2124773/pexels-photo-2124773.jpeg")
.send()
.unwrap()
.text()
.unwrap();
let path = Path::new("tmp/img_test.jpeg");
let display = path.display();
let mut file = match File::create(&path) {
Err(why) => panic!("couldn't create {}: {}", display, why.description()),
Ok(file) => file,
};
match file.write_all(image_file.as_bytes()) {
Err(why) => panic!("couldn't write to {}: {}", display, why.description()),
Ok(_) => println!("successfully wrote to {}", display),
}
}
不要使用 text
,它用于文本,因此会尝试解码原始字节。
只写 response, which implements Into<Body>
where Body
是一个流(这也比获取字节更有效率):
let mut client = reqwest::Client::new();
let mut image_file = client
.get("https://images.pexels.com/photos/2124773/pexels-photo-2124773.jpeg")
.send()
.unwrap();
let path = Path::new("img_test.jpeg");
let display = path.display();
let mut file = match File::create(&path) {
Err(why) => panic!("couldn't create {}: {}", display, why.description()),
Ok(file) => file,
};
match std::io::copy(&mut image_file, &mut file) {
Err(why) => panic!("couldn't write to {}: {}", display, why.description()),
Ok(_) => println!("successfully wrote to {}", display),
}