使用angularjs和spring boot上传文件

时间:2016-03-21 13:14:24

标签: angularjs spring-boot

我在服务器中部署了angularjs个应用程序,在另一个服务器中部署了spring boot个应用程序。

在我的angularjs应用程序中,我有一个上传文件并通过其他控制器发送的表单,然后该控制器将此文件保存在部署了spring boot应用程序的服务器的文件夹中。

这是我的休息控制器:

@CrossOrigin(origins="*")
@RestController
public class Upload {

    @RequestMapping(value="/imageUpload", method = RequestMethod.POST)
    public void UploadFile(MultipartHttpServletRequest request) throws IOException {

        Iterator<String> itr=request.getFileNames();
        MultipartFile file=request.getFile(itr.next());
        String fileName=file.getOriginalFilename();
        File dir = new File("C:\\file");
        if (dir.isDirectory())
        {
            File serverFile = new File(dir,fileName);
            BufferedOutputStream stream = new BufferedOutputStream(
                    new FileOutputStream(serverFile));
            stream.write(file.getBytes());
            stream.close();
        }else {
            System.out.println("not");
        }

    }
}

和我的angularjs控制器发送文件:

$scope.validerOffre= function(){
    var file = $scope.fileUpload;
    var uploadUrl = "/imageUpload";
    fileUploadService.uploadFileToUrl(file, uploadUrl);
    };

此控制器然后调用fileUploadService:

capValueRecruitApp.service('fileUploadService', function ($http) {
  this.uploadFileToUrl = function(file, uploadUrl){
    var fd = new FormData();
    fd.append('file', file);
    $http.post('http://localhost:8080' + uploadUrl, fd, {
        transformRequest: angular.identity,
        headers: {'Content-Type': undefined}
      })
      .success(function(){
      })
      .error(function(){
      });
  }
});

在我的angularjs应用程序中,我想显示我上传的文件,但我不能这样做,因为文件是在Spring Boot应用程序服务器上传的,这是另一台服务器。

所以我的问题是如何将我上传的文件保存在angularjs应用程序服务器的文件夹中,而不是部署spring boot应用程序的服务器。

1 个答案:

答案 0 :(得分:1)

你基本上有两个解决方案:

1:你创建一个新的@RequestMapping,它接受​​文件名(甚至更好的文件UPpload控制器返回的id)并返回文件。 像这样的东西:

@RequestMapping(value="/imageDownload", method = RequestMethod.POST)
public void downloadFile(@RequestParam(value = "fileName", required = true) String fileName,HttpServletResponse response) throws IOException {

    File dir = new File("C:\\file");
    File fileToDownload = new File(dir,fileName);
    if (dir.isDirectory() && fileToDownload.exists()){
        //read fileToDownload and send stream to to response.getOutputStream();

    }else {
        System.out.println("no such file "+ fileToDownload.toString());
        response.sendError(404);
        return;
    }

}

然后你拨打http://localhost:8080/imageDownload?filename=yourUploadedFile.jpg

2:在上传中保存文件时,请将其保存在您的网络服务器可直接访问的位置。

如果我们的angularjs文件由spring应用程序提供,您可以在application.properties文件的spring.resources.staticLocations中添加一个新文件夹。 (见:http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-developing-web-applications.html#boot-features-spring-mvc-static-content