Я пытаюсь создать простое 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)
Любые предложения, как исправить это, будем очень благодарны! Благодарю.
Вам необходимо настроить клиент для режима FTP PASSIVE. – EJP
@EJP - работал как шарм. Добавление client.enterLocalPassiveMode(); после client.connect ("ftp.domain.com"); исправлена проблема. Пожалуйста, напишите свой комментарий в качестве ответа, и я выберу его в качестве решения. Благодарю. – BustedSanta