【问题标题】:Openshift - java.net.BindException: Permission deniedOpenshift - java.net.BindException:权限被拒绝
【发布时间】:2015-09-16 02:35:08
【问题描述】:

我正在尝试创建一个简单的 java 应用程序,它从 URL 下载文件,存储文件,然后将文件上传到 FTP 进行存储。

我有一个(本地)工作代码,可以将文件下载到我在 C:\ 上的本地计算机,并使用本地文件上传到 FTP。

我想将此应用程序移动到 OpenShift 并从那里在 Tomcat6 中运行它。这意味着我必须将 C:\ 驱动器引用更改为 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:权限被拒绝 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) 在 org.apache.commons.net.ftp.FTPClient._storeFile(FTPClient.java:633) 在 org.apache.commons.net.ftp.FTPClient.__storeFile(FTPClient.java:624) 在 org.apache.commons.net.ftp.FTPClient.storeFile(FTPClient.java:1976) 在 AppRun.uploadFile(AppRun.java:72) 在 AppRun.main(AppRun.java:25)

任何解决此问题的建议将不胜感激!谢谢。

【问题讨论】:

  • 您需要将客户端配置为FTP PASSIVE模式。
  • @EJP - 就像一个魅力。添加 client.enterLocalPassiveMode();在client.connect(“ftp.domain.com”)之后;解决了这个问题。请发表您的评论作为答案,我会选择它作为解决方案。谢谢。

标签: java ftp openshift apache-commons


【解决方案1】:

将客户端配置为 FTP PASSIVE 模式。

登录后尝试添加ftp.enterLocalPassiveMode()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多