2015-09-16 6 views
0

Я пытаюсь создать простое java-приложение, которое загружает файл по URL-адресу, сохраняет файл и затем загружает файл на FTP для его хранения.Openshift - java.net.BindException: Permission denied

У меня есть (локальный) рабочий код, который загружает файл на мой локальный компьютер на C: \ и использует локальный файл для загрузки на FTP.

Я хотел бы переместить это приложение в OpenShift и запустить его в Tomcat6 оттуда. Это означает, что я должен изменить ссылку на C: \ drive в каталог в OpenShift. Я ссылался на каталог «tmp».

import java.io.File; 
    import java.io.FileInputStream; 
    import java.io.IOException; 
    import java.net.URL; 
    import java.text.SimpleDateFormat; 
    import java.util.Date; 

    import org.apache.commons.net.ftp.FTPClient; 
    import org.apache.log4j.Logger; 


    public class AppRun { 


     public static void main(String[] args) { 

      Logger log = Logger.getLogger(AppRun.class); 

      Date date = new Date(); 
      SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 

      String formattedDate = sdf.format(date); 

      downloadFile(formattedDate); 
      uploadFile(formattedDate); 
     } 

     // FILE DOWNLOAD 
     public static void downloadFile(String formattedDate){ 

      Logger log = Logger.getLogger(AppRun.class); 

      String sourceURL = "http://websiteURL/pdf/"+formattedDate+".pdf"; 
      String destinationLocation = "/tmp/"+formattedDate+".pdf"; 
      try { 
       org.apache.commons.io.FileUtils.copyURLToFile(
           new URL(sourceURL), 
           new File(destinationLocation) 
           ); 
       log.warn("/tmp/"+formattedDate+".pdf downloaded successfully!"); 
      } 
      catch (Exception e) { 
       log.error(e); 
       log.error("Source URL : " + "http://websiteURL/pdf/"+formattedDate+".pdf" + " Destination URL : " + "/tmp/"+formattedDate+".pdf"); 
       System.out.println("No file found!"); 
      } 

     } 

     // FILE UPLOAD 
     public static void uploadFile(String formattedDate){ 

      Logger log = Logger.getLogger(AppRun.class); 

      FTPClient client = new FTPClient(); 
      FileInputStream fis = null; 

      try { 

       client.connect("ftp.domain.com"); 
       client.login("user", "pass"); 

       // Create an InputStream of the file to be uploaded   
       String originalFile = "/tmp/"+formattedDate+".pdf"; 
       fis = new FileInputStream(originalFile); 

       // 
       // Store file to server 
       // 
       String destinationFileName = formattedDate +".pdf"; 
       client.storeFile(destinationFileName, fis); 
       log.warn("File " + formattedDate +".pdf uploaded successfully!"); 
       client.logout(); 

      } catch (IOException e) { 
       log.error(e); 
       e.printStackTrace(); 
      } finally { 
       try { 
        if (fis != null) { 
         fis.close(); 
        } 
        client.disconnect(); 
       } catch (IOException e) { 
        log.error(e); 
        e.printStackTrace(); 
       } 
      } 

     } 
    } 

Когда я запускаю код, я могу загрузить файл, но часть загрузки не удается:

/var/lib/openshift/XXXXXXXXXXXXXXXXXXXX/app-root/runtime/repo//.openshift/cron/minutely/java: 2015-09-15 22:27:08 WARN AppRun: 41 - /tmp/20150915.pdf скачано успешно! 2015-09-15 22:27:09 ОШИБКА AppRun: 77 - java.net.BindException: Permission denied java.net.BindException: Разрешение отклонено на java.net.PlainSocketImpl.socketBind (собственный метод) на java. net.AbstractPlainSocketImpl.bind (AbstractPlainSocketImpl.java:376) на java.net.ServerSocket.bind (ServerSocket.java:376) на java.net.ServerSocket. (ServerSocket.java:237) на javax.net.DefaultServerSocketFactory .createServerSocket (ServerSocketFactory.java:231) на org.apache.commons.net.ftp.FTPClient. openDataConnection (FTPClient.java:797) at org.apache.commons.net.ftp.FTPClient._storeFile (FTPClient.java:633) at org.apache.commons.net.ftp.FTPClient .__ storeFile (FTPClient. java: 624) at org.apache.commons.net.ftp.FTPClient.storeFile (FTPClient.java:1976) at AppRun.uploadFile (AppRun.java:72) at AppRun.main (AppRun.java:25)

Любые предложения, как исправить это, будем очень благодарны! Благодарю.

+2

Вам необходимо настроить клиент для режима FTP PASSIVE. – EJP

+0

@EJP - работал как шарм. Добавление client.enterLocalPassiveMode(); после client.connect ("ftp.domain.com"); исправлена ​​проблема. Пожалуйста, напишите свой комментарий в качестве ответа, и я выберу его в качестве решения. Благодарю. – BustedSanta

ответ

0

Конфигурирование клиента для режима FTP PASSIVE.

Попробуйте добавить ftp.enterLocalPassiveMode() после авторизации.