2014-02-05 65 views
0

我已经在本地Tomcat的服务器上工作过,现在我刚刚部署了我的应用程序到CloudBees。 除了上传文件到服务器的目录外,一切都很好。上传文件,Spring MVC + CloudBees

我有这样一段代码在我的控制器,这为我工作在localhost:

@RequestMapping("/main/admin/upload") 
public ModelAndView fileUploaded(
     @ModelAttribute("uploadedFile") FileUpload uploadedFile, 
     final HttpServletRequest request, 
     final HttpServletResponse response, BindingResult result) { 

    InputStream inputStream = null; 
    OutputStream outputStream = null; 
    String pdfDirectory = uploadedFile.getPdfDirectory(); 
    MultipartFile file = uploadedFile.getFile(); 
    String fileName = file.getOriginalFilename(); 

    try { 
     inputStream = file.getInputStream(); 

     String pdfFileDirectory = request.getSession().getServletContext() 
       .getRealPath("/") 
       + "resources\\pdf\\" + pdfDirectory + "\\"; 
     File newFile = new File(pdfFileDirectory + fileName); 
     if (!newFile.exists()) { 
      newFile.createNewFile(); 
     } 
     outputStream = new FileOutputStream(newFile); 
     int read = 0; 
     byte[] bytes = new byte[1024]; 

     while ((read = inputStream.read(bytes)) != -1) { 
      outputStream.write(bytes, 0, read); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    return new ModelAndView("redirect:/main/admin"); 
} 

我不知道,如果这条线工作正常:

request.getSession().getServletContext().getRealPath("/") 

我m确定文件夹被创建,因为我已经在我的eclipse项目中手动添加了它们。我还在提取到CloudBees之前手动添加了一些文件到这些文件夹,并且可以访问这些文件,但是当我尝试使用上述代码上载文件时,它不起作用。

+0

我发现了一件事...我不确定如果作品返回这一行:/mnt/genapp/apps/7c7c897e/staxcat/install/webapp.war/resources/pdf/Facebook/有没有办法将文件添加到解压缩到war文件的应用程序中? –

回答

1

文件系统在云上并不是永久存在的,因此,以与在硬盘上相同的方式将文件上传到文件系统并不是一个好习惯。

重新部署/向外扩展的应用程序将从一个不同的节点开始,因此您不应该在那里存储文件。我们建议使用amazon S3(或类似的文件存储)进行存储,并使用本地(“短暂”)文件系统作为临时缓存。

您可以使用System.getProperty(“java.io.tempDir”)获取配置的本地临时数据。

CloudBees还提供了两个不同的示例,可帮助您将文件上传到Amazon S3 - 您还可以使用Dropbox,Google Drive,..-。

更多信息here