Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用MongoDb GridFs上载文件_Java_Mongodb_Spring Mvc_Spring Boot_Gridfs - Fatal编程技术网

Java 无法使用MongoDb GridFs上载文件

Java 无法使用MongoDb GridFs上载文件,java,mongodb,spring-mvc,spring-boot,gridfs,Java,Mongodb,Spring Mvc,Spring Boot,Gridfs,我是SpringBoot新手,我正在尝试将文件上载到Mongodb数据库,保存其objectId并将其链接到我的文档,以便以后下载。 这是我的班级成员: @Document public class Person { @Id private String id; private String firstName; private String lastName; private String age; private String filename; private ObjectId file

我是SpringBoot新手,我正在尝试将文件上载到Mongodb数据库,保存其objectId并将其链接到我的文档,以便以后下载。 这是我的班级成员:

@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";
}
   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";
}
我不知道这是不是最好的方法。 我得到的错误是对“E:/usb/”的访问被拒绝。
有人能帮忙吗?

我在阅读多部分文件文档后找到了解决方案。在允许对目录“E:/usb/”进行完全控制后,我将文件上载到服务器,然后将其传输到目录。这是我的控制器方法:

@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";
}
   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方法,您可以在以下链接中找到它:

您在E-drive中有哪些功能?为什么不直接使用登录用户的主文件夹呢。其次,控制器中有太多的服务逻辑,请将其投入服务。第三,为什么不简单地使用MultiPart发送文件呢。通过这种方式,您可以保存其他信息,如文件大小、名称、元数据等。我想将上载的文件存储在E:/usb/中。如果我错了,您可以纠正我的错误,并为我提供有关多部分的更多信息。谢谢您的评论,一旦我添加了服务层,我将进行修改。请编写一个简单的java文件处理程序,并检查文件是否真的可以访问?尝试此链接我解决了问题。检查下面我的答案。我很高兴收到您的反馈