Below is the code sample which can be directly used to upload a file via FTP using Java
Following are the features
- Using properties file to configure the FTP details
- Ready to use code for browsing a file & upload to FTP
- Tested in both windows & Linux environments
- Provision to restrict the type of file & size of file to be uploaded
uploadfile.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>::FILE UPLOAD TO FTP USING JAVA::</title>
</head>
<body>
<form action="postUpload.jsp" method="post" enctype="multipart/form-data" name="form1">
<table width="200" border="1">
<tr>
<td nowrap="nowrap">File Upload: </td>
<td><input type="file" name="file1" id="file1" /></td>
</tr>
<tr>
<td><input type="submit" value="Upload" name="Submit" /></td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
resource_properties.java
import java.util.MissingResourceException;import java.util.Locale;import java.util.ResourceBundle;public class FtpResource_Properties
{ /** * The main method. * * @param ar * the arguments */public static void main(String ar[])
{ Locale currentLocale = new Locale("EN","IN");
}
public ResourceBundle getproperties_Ftp() {Locale currentLocale = new Locale("EN","IN");
ResourceBundle myFtpResource = ResourceBundle.getBundle("com.tpa_ftp_IN",currentLocale); return myFtpResource;}
}
tpa_ftp_IN.properties
ftp_host = YOUR FTP HOST
ftp_username= YOUR FTP USERNAME
ftp_pwd= YOUR FTP PASSWORD
ftp_port= YOUR FTP PORT
ftp_portread=YOUR FTP PORT TO RETRIEVE FILES
postUpload.jsp
<%@ page import="org.apache.commons.fileupload.*" %>
<%@ page import="org.apache.commons.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.ResourceBundle" %>
<%@ page import="sun.net.ftp.FtpClient" %>
<%@ page import="org.apache.commons.net.ftp.*" %>
<%@ page import="java.net.HttpURLConnection" %>
<%@ page import="java.net.URL" %>
<%@ page import="com.FtpResource_Properties.*" %>
<%
boolean filesaved=false;String filename=null;
String targetfilename=null;
int maxuploadsize=0; boolean isMultipart = FileUpload.isMultipartContent(request); DiskFileUpload upload = new DiskFileUpload(); // parse this request by the handler // The code below will provide a list of items from the requestList items = upload.parseRequest(request);
Iterator itr = items.iterator();
try {FileItem item = (FileItem) itr.next();
File SourceFile = new File(item.getName()); item.write(SourceFile);
long size =SourceFile.length();maxuploadsize=size/1024;
filename=SourceFile.getName();
filename=filename.substring(fname.lastIndexOf("."));String extension=(filename.substring(1)).toLowerCase();
targetfilename="filename";System.out.println(extension);
//Validating the file upload size if( maxuploadsize<=2000) { System.out.println("correct size"); //Validating the file types which can be uploadedif(("jpg".equals(extension) || "doc".equals(extension) ||"pdf".equals(extension) ||"tif".equals(extension) || "xls".equals(extension) || "docx".equals(extension)|| "xlsx".equals(extension) || "tiff".equals(extension) ) )
{ System.out.println("correct Extension");}
}
else {SourceFile.delete();
}
filename=targetfilename+"."+extension;}
catch(Exception e) {System.err.println(E.getMessage());
E.printStackTrace();
}
finally {SourceFile.delete();
}
try { //FTP conenction code ResourceBundle myFtpResource = new FtpResource_Properties().getproperties_Ftp(); //Retrieve FTP Host from properties file String ftphost=myFtpResource.getString("ftp_host"); //Retrieve FTP USername from properties file String ftpuser=myFtpResource.getString("ftp_username"); //Retrieve FTP Password from properties file String ftppassword=myFtpResource.getString("ftp_pwd"); //Retrieve FTP Port from properties fileint ftpport=Integer.parseInt(myFtpResource.getString("ftp_port"));
// Retrieve FTP port for retrieving the file from properties fileint ftpportread=Integer.parseInt(myFtpResource.getString("ftp_portread"));
FTPClient ftp = new FTPClient();ftp.connect(ftphost,ftpport);
ftp.login(ftpuser,ftppassword);
System.out.println("successfully connected");//Below code will be used to check whether the target folder exists in FTP in the specified path. If not exists, will create the specific target folder URL u = new URL("http://"+ftphost+":"+ftpportread+"/targetfoldername/");
HttpURLConnection huc = (HttpURLConnection) u.openConnection();
huc.setRequestMethod("GET");huc.connect();
int rc = huc.getResponseCode(); //If target folder does not exists if(rc==404) { String path="/targetfoldername"; ftp.makeDirectory(path);
}
//Converting the source file to FileInput Stream FileInputStream fis=new FileInputStream(SourceFile); String targetpfolderpath="/targetfoldername/"; ftptest ft=new ftptest(ftphost, ftpuser, ftppassword,ftpport,fis,targetpfolderpath+filename+"" );
filesaved=true;
//Disconnecting the FTPftp.disconnect();
}
catch(Exception e) {System.err.println(E.getMessage());
E.printStackTrace();
}
finally {SourceFile.delete();
}
%>
ftptest.java
import java.io.*;import java.net.*;public class ftptest
{ protected FtpClient con;public final FileInputStream sourcefile;
public final String targetfile;
public ftptest(String _host, String _user, String _password,int _port,FileInputStream _sourcefile, String _targetfile)
{ con = new FtpClient(_host, _user, _password,_port);sourcefile = _sourcefile;
targetfile = _targetfile;
upload();
}
protected void upload()
{ try {OutputStream os = con.openUploadStream(targetfile);
FileInputStream is = sourcefile;
byte[] buf = new byte[100000];
int b; while (true) {b = is.read(buf);
if (b <= 0) break;
os.write(buf, 0, b);
System.out.print("Uploading File to FTP");}
os.close();
os.flush();
is.close();
con.close();
}
catch (Exception E) {System.err.println(E.getMessage());
E.printStackTrace();
}
}
public static void main(String args[])
{//}
}
class FtpClient{public final String host;
public final String user;
protected final String password;
protected final int port;
protected URLConnection urlc;public FtpClient (String _host, String _user, String _password,int _port)
{host = _host;
user = _user;
password = _password;
port=_port;
urlb = null;
}
protected URL genURL(String targetfile) throws MalformedURLException
{ if (user == null)return new URL("ftp://"+ host+ "/"+ targetfile+ ";type=i");
elsereturn new URL("ftp://"+ user+ ":"+ password+ "@"+ host+ "/"+ targetfile+ ";type=i");
}
protected InputStream openDownloadStream(String targetfile) throws Exception
{URL url = genURL(targetfile);
urlb = url.openConnection();
InputStream is = urlb.getInputStream();
return is;}
protected OutputStream openUploadStream(String targetfile) throws Exception
{URL url = genURL(targetfile);
urlb = url.openConnection();
OutputStream os = urlb.getOutputStream();
return os;}
protected void close()
{urlb = null;
System.gc();
}
}
No comments:
Post a Comment