2016-07-13 4 views
1

Ich habe versucht, den temporären Pfad einer hochgeladenen Datei mit Iron params zu erhalten. Ich habe diesen Request-Handler:Zugriff auf Dateipfad beim Formularupload mit Iron Params

fn handler(req: &mut Request) -> IronResult<Response> { 
    let tmp_file_name = req.get_ref::<Params>().unwrap().find(&["file"]).unwrap(); 
    println!("{:?}", tmp_file_name); 
    Ok(Response::with((status::Ok, "Lorem Ipsum."))) 
} 

Es zeigt etwas wie folgt aus:

File { path: "/xxx/yyy", filename: Some("file.txt"), size: 123 } 

Aber wenn ich versuche, auf den Pfad zuzugreifen:

println!("{:?}", tmp_file_name.path()); 

Es ist nicht zu kompilieren:

error: attempted access of field `path` on type `&params::Value`, 
but no field with that name was found 

Ich glaube, ich vermisste Som Die Grundlagen zum Typ, aber ich weiß nicht, wo ich (neu) anfangen soll.

Antwort

2

params::Value ist kein params::File, aber eine enum, could contain ein params::File.

Dies sollte mit der richtigen Einfuhren arbeiten (ungetestet):

match req.get_ref::<Params>().unwrap().find(&["file"]) { 
    Some(&Value::File(ref file)) => { 
    println!("{:?}", file.path()) 
    } 
    _ => { 
    println!("no file"); 
    } 
} 
+0

Oops es nicht funktioniert "expected' & params :: Value', gefunden 'params :: Value'" in „Some (Value :: File (Datei)) " –

+0

Versuchen Sie' Some (Wert :: Datei (Datei)) '->' Einige (& Wert :: Datei (Datei)) '. – Dogbert

+0

"kann sich nicht aus ausgeliehenem Inhalt bewegen". Es funktioniert mit 'Some (& Value :: File (ref file))'. Trotzdem danke! –

Verwandte Themen