2016-07-13 2 views
1

Я попытался получить временный путь для загруженного файла, используя Iron params. У меня есть этот запрос обработчик:Доступ к пути к файлу при загрузке формы с помощью 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."))) 
} 

Это показывает что-то вроде этого:

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

Но если я пытаюсь получить доступ к пути:

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

Это не компилируется:

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

Я думаю, что я пропустил som Основы о типе, но я не знаю, где (перезапустить).

ответ

2

params::Value не является params::File, но перечисление, которое could contain a params::File.

Это должно работать с соответствующими импорта (непроверенные):

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

К сожалению, это не работает "ожидаемый' & PARAMS :: value', найдено 'Params :: value'" в «Some (Value :: Файл (файл)) « –

+0

Попробуйте' Some (Value :: File (file)) '->' Some (& Value :: File (file)) '. – Dogbert

+0

«не может выйти из заимствованного контента». Он работает с 'Some (& Value :: File (ref file))'. В любом случае, спасибо! –

Смежные вопросы