Use 'tokio::fs::File' in the 'pastebin' example.

This commit is contained in:
Jeb Rosen 2020-07-11 09:54:05 -07:00
parent 2b3d8110f1
commit 114a733d70
2 changed files with 12 additions and 18 deletions

View File

@ -6,11 +6,10 @@ mod paste_id;
#[cfg(test)] mod tests; #[cfg(test)] mod tests;
use std::io; use std::io;
use std::fs::File;
use std::path::PathBuf;
use rocket::Data; use rocket::Data;
use rocket::response::{content, Debug}; use rocket::response::{content::Plain, Debug};
use rocket::tokio::fs::File;
use crate::paste_id::PasteID; use crate::paste_id::PasteID;
@ -23,14 +22,14 @@ async fn upload(paste: Data) -> Result<String, Debug<io::Error>> {
let filename = format!("upload/{id}", id = id); let filename = format!("upload/{id}", id = id);
let url = format!("{host}/{id}\n", host = HOST, id = id); let url = format!("{host}/{id}\n", host = HOST, id = id);
paste.stream_to_file(PathBuf::from(filename)).await?; paste.stream_to_file(filename).await?;
Ok(url) Ok(url)
} }
#[get("/<id>")] #[get("/<id>")]
fn retrieve(id: PasteID<'_>) -> Option<content::Plain<File>> { async fn retrieve(id: PasteID<'_>) -> Option<Plain<File>> {
let filename = format!("upload/{id}", id = id); let filename = format!("upload/{id}", id = id);
File::open(&filename).map(|f| content::Plain(f)).ok() File::open(&filename).await.map(Plain).ok()
} }
#[get("/")] #[get("/")]

View File

@ -213,9 +213,6 @@ mkdir upload
For the `upload` route, we'll need to `use` a few items: For the `upload` route, we'll need to `use` a few items:
```rust ```rust
use std::io;
use std::path::PathBuf;
use rocket::Data; use rocket::Data;
use rocket::http::RawStr; use rocket::http::RawStr;
use rocket::response::Debug; use rocket::response::Debug;
@ -266,8 +263,6 @@ Here's our version (in `src/main.rs`):
# fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { Ok(()) } # fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { Ok(()) }
# } # }
use std::path::PathBuf;
use rocket::Data; use rocket::Data;
use rocket::response::Debug; use rocket::response::Debug;
@ -278,7 +273,7 @@ async fn upload(paste: Data) -> Result<String, Debug<std::io::Error>> {
let url = format!("{host}/{id}\n", host = "http://localhost:8000", id = id); let url = format!("{host}/{id}\n", host = "http://localhost:8000", id = id);
// Write the paste out to the file and return the URL. // Write the paste out to the file and return the URL.
paste.stream_to_file(PathBuf::from(filename)).await?; paste.stream_to_file(filename).await?;
Ok(url) Ok(url)
} }
``` ```
@ -335,13 +330,13 @@ paste doesn't exist.
```rust ```rust
# #[macro_use] extern crate rocket; # #[macro_use] extern crate rocket;
use std::fs::File;
use rocket::http::RawStr; use rocket::http::RawStr;
use rocket::tokio::fs::File;
#[get("/<id>")] #[get("/<id>")]
fn retrieve(id: &RawStr) -> Option<File> { async fn retrieve(id: &RawStr) -> Option<File> {
let filename = format!("upload/{id}", id = id); let filename = format!("upload/{id}", id = id);
File::open(&filename).ok() File::open(&filename).await.ok()
} }
``` ```
@ -420,14 +415,14 @@ the `retrieve` route, preventing attacks on the `retrieve` route:
```rust ```rust
# #[macro_use] extern crate rocket; # #[macro_use] extern crate rocket;
# use std::fs::File; # use rocket::tokio::fs::File;
# type PasteId = usize; # type PasteId = usize;
#[get("/<id>")] #[get("/<id>")]
fn retrieve(id: PasteId) -> Option<File> { async fn retrieve(id: PasteId) -> Option<File> {
let filename = format!("upload/{id}", id = id); let filename = format!("upload/{id}", id = id);
File::open(&filename).ok() File::open(&filename).await.ok()
} }
``` ```