このエラーに関連する多くのポストを見たことがありますが、私のために適切な解決策が見つかっていません。 私はもう一度投稿しています。ftpサーバに接続中に接続タイムアウト例外が発生しました
私はft.drivehq.com上のファイルをapache commons libraryを使ってアップロードしようとしています。私は、ファイアウォールの設定などのような多くのソリューションを試してみました。
フォームフィールドからファイル名を取得し、ftp connectメソッドとupload fileメソッドを呼び出すコードです。
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ismultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if(!ismultipart)
{
out.println("<html>");
out.println("<head>");
out.println("<title>servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>no file upload</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setSizeThreshold(1 * 1024 * 1024);
fileItemFactory.setRepository(new File(TMP_DIR_PATH));
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
Connection con = null;
PreparedStatement pstm = null;
PreparedStatement pstm1 = null;
PreparedStatement pstm2 = null;
PreparedStatement pstm3 = null;
try {
/*
* Parse the request
*/
con = Dbconnector.getConnection();
List items = uploadHandler.parseRequest(request);
Iterator itr = items.iterator();
String fileName = "";
FileItem item = (FileItem) itr.next();
System.out.println("item "+item);
String fName = item.getName();
System.out.println("fname " + fName);
fileName = (String) item.getName();
System.out.println("filename " + fileName);
int x = fileName.lastIndexOf('\\');
String fN = fileName.substring(x + 1, fileName.length());
System.out.println(fN);
SimpleFTPClient client = null;
\\table to retrieve drivehq login details
String sq1 = "select * from adserver";
pstm3 = con.prepareStatement(sq1);
ResultSet rs1 = pstm3.executeQuery();
String user = "";
String cld = "";
while (rs1.next()) {
client = new SimpleFTPClient();
cld = rs1.getString("host_name");
user = rs1.getString("username");
client.setHost(rs1.getString("host_name"));
client.setUser(rs1.getString("username"));
client.setPassword(rs1.getString("password"));
client.setRemoteFile("pdp_cloud");
client.setport(21);
boolean log = client.connect();
System.out.println(log);
if (log) {
if(client.uploadFile(item.getInputStream())) {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + user);
String sq2 = "insert into upload (file_name,date,file_data)values(?,?,?)";
pstm1 = con.prepareStatement(sq2);
pstm1.setString(1, fileName);
//pstm1.setString(2, "not set");
// pstm1.setString(3, "not set");
pstm1.setString(2, dateNow);
pstm1.setBinaryStream(3, item.getInputStream(), item.getSize());
pstm1.execute();
} else {
System.out.println(">>>>>>else");
}
} else {
System.out.println("not connected");
}
}
response.sendRedirect("CreateBlocks.html?msg=File Uploaded..");
} catch (Exception ex) {
ex.printStackTrace();
response.sendRedirect("UploadFile.html?msg=Cloud Not Connected");
// log("Error encountered while uploading file", ex);
}
}
これは、接続方法とアップロードとダウンロードのファイルメソッドを持つクラスです。実際のユーザー名とパスワードはここでは使用していません。
public class SimpleFTPClient {
/** The URL connection object */
private URLConnection m_client;
/** The FTP host/server to be connected */
private String host;
/** The FTP user */
private String user;
/** The FTP user’s password */
private String password;
/** The remote file that needs to be uploaded or downloaded */
private String remoteFile;
/** The previous error message triggered after a method is called */
private String erMesg;
/** The previous success message after any method is called */
private String succMesg;
/**set port number */
private int port;
public SimpleFTPClient() {
}
/** Setter method for the FTP host/server */
public void setHost(String host) {
this.host = host;
}
/** Setter method for the FTP user */
public void setUser(String user) {
this.user = user;
}
/** Setter method for the FTP user’s password */
public void setPassword(String p) {
this.password = p;
}
/** Setter method for the remote file, this must include the sub-directory path relative
to the user’s home directory, e.g you’e going to download a file that is within a sub directory
called "sdir", and the file is named "d.txt", so you shall include the path as "sdir/d.txt"
*/
public void setRemoteFile(String d) {
this.remoteFile = d;
}
/** The method that returns the last message of success of any method call */
public synchronized String getLastSuccessMessage() {
if (succMesg == null) {
return "";
}
return succMesg;
}
/** The method that returns the last message of error resulted from any exception of any method call */
public synchronized String getLastErrorMessage() {
if (erMesg == null) {
return "";
}
return erMesg;
}
/**method to set port number for host */
public void setport(int p)
{
this.port = p;
}
/** The method that handles file uploading, this method takes the absolute file path
of a local file to be uploaded to the remote FTP server, and the remote file will then
be transfered to the FTP server and saved as the relative path name specified in method setRemoteFile
@param localfilename – the local absolute file name of the file in local hard drive that needs to
FTP over
*/
public synchronized boolean uploadFile(InputStream is) {
//public synchronized boolean uploadFile(String localfilename) {
try {
// InputStream is = new FileInputStream(localfilename);
BufferedInputStream bis = new BufferedInputStream(is);
OutputStream os = m_client.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] buffer = new byte[1024];
int readCount;
while ((readCount = bis.read(buffer)) > 0) {
bos.write(buffer, 0, readCount);
}
bos.close();
this.succMesg = "Uploaded!";
return true;
} catch (Exception ex) {
ex.printStackTrace();
StringWriter sw0 = new StringWriter();
PrintWriter p0 = new PrintWriter(sw0, true);
ex.printStackTrace(p0);
erMesg = sw0.getBuffer().toString();
return false;
}
}
/** The method to download a file and save it onto the local drive of the client in the specified absolut path
@param localfilename – the local absolute file name that the file needs to be saved as */
public synchronized boolean downloadFile(String localfilename) {
try {
InputStream is = m_client.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
System.out.println(">>>>>>>>>>>"+localfilename);
OutputStream os = new FileOutputStream(localfilename);
BufferedOutputStream bos = new BufferedOutputStream(os);
byte[] buffer = new byte[1024];
int readCount;
while ((readCount = bis.read(buffer)) > 0) {
bos.write(buffer, 0, readCount);
}
bos.close();
is.close(); // close the FTP inputstream
this.succMesg = "Downloaded!";
return true;
} catch (Exception ex) {
ex.printStackTrace();
StringWriter sw0 = new StringWriter();
PrintWriter p0 = new PrintWriter(sw0, true);
ex.printStackTrace(p0);
erMesg = sw0.getBuffer().toString();
return false;
}
}
/** The method that connects to the remote FTP server */
public synchronized boolean connect() {
try {
URL url = new URL("ftp://" + user + ":" + password + "@" + host + ":" + port + "/" + remoteFile);
m_client = url.openConnection();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>.."+"ftp://" + user + ":" + password + "@" + host + "/" + remoteFile);
return true;
} catch (Exception ex) {
ex.printStackTrace();
StringWriter sw0 = new StringWriter();
PrintWriter p0 = new PrintWriter(sw0, true);
ex.printStackTrace(p0);
erMesg = sw0.getBuffer().toString();
return false;
}
}
は時々私は..また、この声明に
OutputStream os = m_client.getOutputStream();
errosを取得し、これはエラーログです -
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.ftp.impl.FtpClient.doConnect(Unknown Source)
at sun.net.ftp.impl.FtpClient.tryConnect(Unknown Source)
at sun.net.ftp.impl.FtpClient.connect(Unknown Source)
at sun.net.ftp.impl.FtpClient.connect(Unknown Source)
at sun.net.www.protocol.ftp.FtpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream(Unknown Source)
at pdp_cloud.SimpleFTPClient.uploadFile(SimpleFTPClient.java:87)
at pdp_cloud.UploadFile.processRequest(UploadFile.java:161)
at pdp_cloud.UploadFile.doPost(UploadFile.java:223)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
URLの形式が正しいですか? 誰でも私を助けてくれます..
[なぜ誰かが私を助けることができますか?]実際の質問ではありませんか?](https://meta.stackoverflow.com/questions/284236/why-is-can-someone-help-me-not-an-実際の質問) –
これはいいと思います.. –