B
beloff
Друзья, прощу помощи. Нужно настроить выгрузку на ftp шару на сайт файл, нигде не могу найти способы. Есть ли вообще такая возможность?
Честно. не знаю. но да, работает на windows-платформе.это та, что намертво к винде прикручена?
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Calendar;
public class FTPUploader {
private FTPClient client = null;
private File file = null;
private InputStream inputStream = null;
//private BufferedInputStream inputStream = null;
private boolean checkLogin = false;
public boolean FTPCheckConnect(String hostname, String username, String password){
boolean result = false;
try {
result = FTPConnect( hostname, username, password );
}finally {
try {
client.disconnect();
System.out.println("Соединение с сервером разорвано...");
return result;
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public boolean FTPDisconnect(){
boolean res = false;
try{
client.disconnect();
System.out.println("Соединение с сервером разорвано...");
res = true;
} catch (IOException e) {
e.printStackTrace();
}
return res;
}
public boolean FTPConnect(String hostname, String username, String password) {
if (client == null) {
client = new FTPClient();
}
try {
client.setControlEncoding("UTF-8");
client.enterLocalPassiveMode();
client.setBufferSize(1024000); //maybe it will raise speed
client.connect(hostname);
checkLogin = client.login(username, password);
if (checkLogin) {
System.out.println("Соединение с сервером " + hostname + " установленно...");
client.setFileType(FTP.BINARY_FILE_TYPE);
}
else {
client.disconnect();
}
} catch (IOException e) {
e.printStackTrace();
}
return checkLogin;
}
public boolean loadFile( String fileName, String ftpFileName ){
boolean result = false;
if (checkLogin) {
try {
OutputStream output;
output = new FileOutputStream(fileName);
result = client.retrieveFile(ftpFileName, output);
output.flush();
output.close();
if (result){
System.out.println("Файл " + fileName + " скопирован");
}
if (client.logout()) {
System.out.println("Пользователь покинул сервер...");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
client.disconnect();
System.out.println("Соединение с сервером разорвано...");
return result;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
public boolean uploadFile(String fileName, String uploadFolder, boolean removeAfter, int maxBackup, String mask) {
boolean result = false;
if (checkLogin) {
try {
//создаем каталог, если нужно
String [] folders = uploadFolder.split("/");
int returnCode;
for( int i = 0; i < folders.length; i++ ){
//System.out.println("i="+i+ " folder=" + folders[i] + "#");
client.changeWorkingDirectory( folders[ i ] );
returnCode = client.getReplyCode();
if (returnCode == 550) {
client.makeDirectory( folders[ i ] );
client.changeWorkingDirectory( folders[ i ] );
}
}
file = new File(fileName);
inputStream = new FileInputStream(file);
client.changeWorkingDirectory( uploadFolder );
String uploadName = fileName.substring( fileName.lastIndexOf('\\') + 1, fileName.length() );
//System.out.println("uploadName=" + uploadName);
result = client.storeFile(uploadName, inputStream);
System.out.println("Файл " + fileName + " загружен");
//удаляем лишнее, закомментил и удалил отсюда, бо кроме меня никому не надо
//removeLastNFiles( uploadFolder, mask, maxBackup);
if (client.logout()) {
System.out.println("Пользователь покинул сервер...");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
if (removeAfter && (file != null)) {
System.out.println("Удаление "+ file.getPath());
if (file.delete()){
System.out.println("Удалено...");
}else{
System.out.println("Не удалено...");
}
}
client.disconnect();
System.out.println("Соединение с сервером разорвано...");
return result;
} catch (IOException e) {
e.printStackTrace();
}
}
}
return result;
}
}
Use "FTPClient"
UseLSX "*javacon"
Sub UploadToFTP( username As String, password As String, ftpIP As String, uploadDir As String, myfilepath As String,_
backupMax As Integer, mask As String )
%REM
KB071216
%END REM
Dim mySession As JavaSession
Dim myClass As JavaClass
Dim client As JavaObject
Dim answer As Boolean
Dim myfilename As String
On Error GoTo ErrHandler
myfilename = StrRightBack( myfilepath, "\" )
Set mySession = New JavaSession()
Set myClass = mySession.GetClass("FTPUploader")
Set client = myClass.CreateObject()
answer = client.FTPConnect( ftpIP, username, password )
If answer = True Then
msgbox "Connected"
Else
msgbox "Not Connected"
Exit Sub
End If
mask = GetRegExpByDbName( mask )
answer = client.uploadFile( myfilepath, uploadDir, False, backupMax, mask )
If Not answer Then Error 09, {FTP upload error:} & ftpIP
cleanup:
Exit Sub
ErrHandler:
msgbox "Sub UploadToFTP >> Error " & Error & " on " & Erl
Resume cleanup
End Sub
%REM
Function GetRegExpByDbName
Description: создаем регулярку для проверки на фтп
%END REM
Function GetRegExpByDbName( dbFileName As string ) As String
Dim res As String
Dim filename As String
Dim ext As String
GetRegExpByDbName = ""
filename = StrLeftBack( dbFileName, "." )
ext = StrRightBack( dbFileName, "." )
res = "^(" & Replace( filename, " ", "\s" ) & ")\d{8}(\." & ext & ")$"
GetRegExpByDbName = res
End Function
еще надо апачевскую либу копировать (в jvm/lib/ext)Написано не мной через яву
в моем случае jar-ник commons-net-3.3.jar покладен прямо в ява библиотеке в раздел Archiveеще надо апачевскую либу копировать (в jvm/lib/ext)
при запуске из агентов - будет глючатьв моем случае jar-ник commons-net-3.3.jar покладен прямо в ява библиотеке в раздел Archive
эээ, точно? Оно собственно на стороне сервера и работает. Жалоб не поступалопри запуске из агентов - будет глючать
апачевские либы используют синглтоны и свои логгеры, агенты используют модель запуска нарушающей эту логику...эээ, точно? Оно собственно на стороне сервера и работает. Жалоб не поступало
Обучение наступательной кибербезопасности в игровой форме. Начать игру!