我在服务器中部署了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应用程序的服务器。
答案 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)