выгрузка документа на FTP

B

beloff

Друзья, прощу помощи. Нужно настроить выгрузку на ftp шару на сайт файл, нигде не могу найти способы. Есть ли вообще такая возможность?
 
B

beloff

Не, для LS. Все равно спасибо, покурю это то что есть, параллельно попрошу своих админов перемаунтить папку без авторизации в нашу сеть, так проще будет
 

savl

Lotus Team
28.10.2011
2 498
282
@beloff если будет в вашей сети, то можно: монтировать сетевой путь как диск под нужным логином/паролем и просто класть файл.
Логин,пароль и путь хранить где-нибудь в базе.
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
573
если сервак на никсах - можно монтировать через fstab, сразу в папку юзера (домины)
пример:
//192.168.0.1/1sshare /media/1sshare cifs credentials=/etc/.1sshare-pw,uid=999,iocharset=utf8 0 0
адрес сервера "свой", uid - соответ. нотусевому юзеру
в виндядко была команда net share/use (с соответ. параметрами)
работа через сервак (чтобы не возиться с доступом каждого юзера)
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 262
138
Если Java совсем сложно, то есть ещё FTP с командной строки. Просто подготовить правильный BAT или SH файл и запустить его.
 
  • Нравится
Реакции: DmityiD и savl

DmityiD

Green Team
05.12.2016
31
19
Дай больше информации. Окдуд?Куда? Какие ОС стоят. Какой фьп сервер.?Может быть на фтп сервер есть ssh?
 

maliy

Green Team
20.03.2007
174
2
на сервер стоит Windows 2003. Там стоит Lotus Domino Server. В одной из БД Есть два агента - которые пересылают По FTP xml файлы.
FTP сервер - любой. На ОС Windows 2008 стоит FTP - FileZilla. На другом сервере ОС - Debian - там FTP - VSftpd.
 

Domino-Designer

Людям надо поморгать!
Lotus Team
06.12.2011
615
221
@maliy & all: если всё винда, то упомянутая NotesFTP -= тут =-

Script library that demonstrates how to implement basic FTP functionality in LotusScript.

Category: Tools
Audience: Application Developer
Product: Notes/Domino
Release: R5
Platform: Windows NT/95/98
Date Posted: 30.05.2000
File Name: NotesFTP.nsf
File Size: 327 680 bytes

Я через нее снимал отчетность с банкоматов.

Но всётаки лучше java*
 
B

Bob84

Написано не мной через яву:
Код:
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
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 731
573
эээ, точно? Оно собственно на стороне сервера и работает. Жалоб не поступало
апачевские либы используют синглтоны и свои логгеры, агенты используют модель запуска нарушающей эту логику...
-можете сами увидеть как отрабатывает GC, после завершения агента
-объекты созданные в агенте убиваются (исключение - нек. объекты классов из состава ИБМ жвм и jvm/lib/ext)
-доступ, для классов не из состава jvm/lib/ext, ограничен значительно
т.о. объекты могут не получить нужного доступа, или быть уничтожены раньше чем "полагается", или получить конфликт на старте (согласно синглтону, кот. нет для контекста разных инстансов агента, если либы "вложены")
 
Последнее редактирование:
B

Bob84

Понятно, это правда немного усложняет обновление кучи серверов, если пришлось новую стороннюю java либу использовать...
 
Мы в соцсетях: