2015-09-11 2 views
1

Я новичок в Spring-Boot, я пытаюсь загрузить файл в базу данных Mongodb, сохранить его objectId и связать его с моим документом, чтобы загрузить его позже. Вот мой класс Person:Не удалось загрузить файл с помощью MongoDb GridFs

@Document 
public class Person { 
@Id 
private String id; 

private String firstName; 
private String lastName; 
private String age; 
private String filename; 
private ObjectId file; 
....} 

Это мой метод контроллера:

@RequestMapping(value="/addperson",method=RequestMethod.POST) 
public String ajout(Model model,@Valid PersonForm pf){ 

    Person p=new Person(pf.getFirstname(),pf.getLastName(),pf.getAge()); 
    InputStream inputStream=null; 
    try { 
     inputStream = new FileInputStream("E:/usb/"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    p.setFilename(pf.getFilename()); 
    repository.linkFileToMyDoc(p,inputStream,p.getFilename()); 
    repository.save(p); 
    model.addAttribute("PersonForm",pf); 
    return "personview"; 
} 

Интересно, если это лучший способ сделать это. Ошибка, которую я получаю, заключается в том, что доступ к «E:/usb /» отрицается. Может кто-нибудь помочь пожалуйста

+0

Что вы имеете в E диске? Почему бы просто не использовать домашнюю папку вашего зарегистрированного пользователя. Во-вторых, слишком много логики обслуживания, которые у вас есть в контроллере, включите его в сервис. В-третьих, почему бы просто не использовать MultiPart для отправки файлов. Таким образом, вы можете сохранить другую информацию, такую ​​как размер файла, имя, метаданные и т. Д. –

+0

Я хочу сохранить загруженные файлы там в E:/usb/..can исправить меня, если я ошибаюсь, и предоставить мне больше информация о MultiPart.Thanks for ur comment, после добавления уровня сервиса я сделаю изменения – METTAIBI

+0

, пожалуйста, напишите простой обработчик java-файла и проверьте, действительно ли файл доступен или нет? –

ответ

0

Я нашел решение после чтения документации MultipartFile. Я загрузил файл на сервер, а затем передал его в каталог, после того, как вы установили полный контроль в каталог «E:/usb /». это мой метод контроллера:

Person p=new Person(pf.getFirstname(),pf.getLastName(),pf.getAge()); 


    try { 
     File dest = null; 
     String str = "C:/tt/"+pf.getFile().getOriginalFilename(); 
     File dir = new File(str); 
     dir.createNewFile(); 
     pf.getFile().transferTo(dir); 
     p.setFilename(str); 
     InputStream inputStream=pf.getFile().getInputStream(); 
     repository.linkFileToMyDoc(p,inputStream,pf.getFile().getOriginalFilename()); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    repository.save(p); 
    model.addAttribute("PersonForm",pf); 
    return "personview"; 
} 

метод linkFileToMydoc, вы найдете его в этой ссылке: How to reference GridFSFile with @DbRef annotation (spring data mongodb)

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