[英]Openshift - java.net.BindException: Permission denied
我试图创建一个简单的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.AbstractPlainSocketImpl的java.net.PlainSocketImpl.socketBind(本机方法)的权限被拒绝。 java.net.ServerSocket上的bind(AbstractPlainSocketImpl.java:376)java.net.ServerSocket上的bind(ServerSocket.java:376).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模式。
登录后尝试添加ftp.enterLocalPassiveMode()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.