FileCatalyst는 제 3 자 애플리케이션 및 워크 플로우에 통합을위한 많은 옵션을 제공합니다. 우리의 SDK는 개발 언어와 환경의 다양한 구성 요소의 전체 범위를 자랑합니다.

요청 시험

구성 요소 기술 FileCatalyst 제품
클라이언트 API 자바, C ++ *, 아이폰 OS * 안드로이드 *, .NET * 직접 워크 플로
자바 애플릿, 자바 스크립트 API 자바 플러그인이있는 모든 최근의 웹 브라우저 곧장
원격 관리 자바, REST 직접 워크 플로
CLI / 쉘 스크립팅 명령 행 * 직접 워크 플로
C ++ API / CLI 비 자바 명령 행 및 API 곧장
* 및 워크 플로 및 웹 메일 파일 지역 만에서 전송.

이 개발 키트는 우리의 제품의 기초입니다; 당신이 어떤 자격을 갖춘 제품을 소유하고 있다면, 개발 키트 추가 기능으로 허가 할 수있다. 독립형 개발의 경우, SDK는 일반적으로 FileCatalyst 직접에 추가됩니다; 그러나, 일부 구성 요소는 FileCatalyst 워크 플로우와 상호 작용하도록 설계되었습니다.

시계 SDK 웹 세미나

동반 다운로드 여기 예제 소스 코드

클라이언트 API

우리의 잘 문서화 된 API는 가속화 파일 전송을위한 FileCatalyst 서버에 대한 연결을 설정하는 데 필요한 모든 메서드에 액세스 할 수 있습니다. 코드의 짧은 몇 줄, 당신은 진행이 될 수 있습니다. 기본값은 방법의 전체 범위는 고급 기능에 액세스 할 수 있도록 호출로, 대부분의 기능에 사용됩니다.

클라이언트 API는 프로그래밍 FileCatalyst 워크 플로우 또는 웹 메일에 작업 파일을 제출할 수 있습니다.

unlimited.fc.client.api을 가져옵니다. *; 수입는 java.io *; 공용 클래스 UploadSample {공공 정적 무효 메인 (문자열 인수 [])는 예외 {FCClient 구단 = 새로운 FCClient ( 「192.168.1.30」, 21)를 발생; fc.setShowConsoleLog (TRUE); fc.initialize (); fc.connect (); fc.login ( "익명", "me@email.com"); fc.setMode (TransferMode.UDP); 시작 속도를 설정하고 속도를 동일한 대상 //. 정체가 발생하는 경우가 느려집니다. fc.setStartRate (10000); fc.setTargetRate (10000); fc.setVerifyIntegrity (TRUE); TransferHook 업로드 = fc.upload (새 파일 ( "C : /temp/500MB.zip")); (! upload.isTransferComplete ()) {// 당신은 // TransferHook 객체의 다양한 방법을 사용하여 여기에 몇 가지 진행 정보를 표시 할 수 있지만 경우 (upload.getStatusCode () == upload.TRANSFERRING) {에서 System.out.println (업로드 .getPercent () + "%"+ upload.getRate () + "Kbps까지"); } {(1000) Thread.sleep를 시도; } 캐치 (예외 : InterruptedException의 예) {}}) (서버 fc.disconnect에서 분리 //; ) (fc.finish을 정리 //; }}
import unlimited.fc.client.api.*;
import java.io.*;
import java.util.*;
import java.util.Observable;
import java.io.IOException;
import unlimited.fc.com.FCException;

/**
 * This example illustrates the use of Observables to monitor a TransferHook object.
 */

public class UploadSampleAdvanced implements Observer {

  TransferHook upload = null;

  public void go() throws IOException, FCException {

    FCClient fc = new FCClient("192.168.1.30", 2057);
    fc.setShowConsoleLog(true);
    fc.initialize();
    fc.connect();
    fc.login("anonymous", "me@email.com");

    // Let's auto detect the transfer mode.  Unless RTT is high enough, FTP gets used.
    fc.setMode(TransferMode.AUTO);

    // lets send at a constant 1500 Kbps, no congestion control.
    // the congestion control only comes into play if FC gets detected as the best transfer mode
    fc.setUseCongestionControl(false);
    fc.setTargetRate(1500);

    // verify the file afterwards
    fc.setVerifyIntegrity(true);
    upload = fc.upload(new File("c:/bigfiles/500MB"));
    upload.addObserver(this);

    try {
      synchronized (this) {
        wait();
      }
    }
    catch (InterruptedException ex) {
    }

    // disconnect from the server
    fc.disconnect();

    // clean up
    fc.finish();
  }

  public void update(Observable observable, Object object) {

    if (!upload.isTransferComplete() && !upload.isTransferCancelled() &&
        !upload.isTransferError()) {
      if (upload.getStatusCode() == upload.TRANSFERRING &&
          upload.getCurrentPercent() != 100) {
        printProgress(upload.getRate(), upload.getCurrentPercent());
      }
      else if (upload.getStatusCode() == upload.DONEFILE) {
        printProgress(upload.getRate(), 100);
      }
    }
    else {
      // all files complete
      synchronized (this) {
        notifyAll();
      }
    }
  }

  public void printProgress(int rate, int percent) {
    System.out.println(percent + "%");
    System.out.println(rate + " kbps");
  }

  public static void main(String args[]) throws Exception {
    new UploadSampleAdvanced().go();
  }
}

서버 API

서버 Java 및 REST API는 FileCatalyst 서버에 사용자 요청 세션 정보를 관리하는 데 필요한 모든 방법을 노출합니다.

// Example below is sample code in which the application tries to create a user and
 // wraps up logic for reconnection attempts should the communication between the ServerAPI
 // and the Server be severed.

 // Call to setup initial connection to FileCatalyst Server
 public void init() throws Exception {
   FCServer fcserver = new FCServer();
   // connection parameters
   fcserver.setHostname("localhost");
   fcserver.setPort(12400);
   fcserver.setUserName("admin");
   fcserver.setPassword("system");
   // connect
   fcserver.connect();
 }

 // attempts a reconnection
 private void reconnect () throws Exception {
   try {
     fcserver.disconnect();
   } catch (Exception e) {
   }
   fcserver.connect();
 }

 //
 // Method to modify login credentials for a user.  If the user does not yet exist, create the
 // user as well.
 // @param fcUserName FTP Login name
 // @param fcPassword Password the user wants to have
 // @throws Exception If you cannot connect to the server after 3 attempts, or the server is not allowing you to
 //                   create/modify the user.
 //
 public void createOrModifyUserCredentials(String fcUserName, String fcPassword) throws Exception {
   // Get the FileCatalyst user.
   int MAXATTEMPTS = 3;
   UserContainer fcUser = null;
   int retryAttempts = 0;
   while (fcUser == null && retryAttempts < MAXATTEMPTS ) {
     // try to connect if we've lost the connection
     if (!fcserver.isConnected()) {
       reconnect();
     }
     try {
       fcUser = fcserver.getUser(fcUserName);
       if (fcUser == null) {
         // null return indicates user does not exist -- create
         fcserver.addUser(fcUserName, fcPassword);
         // test to see if the user is really there
         fcserver.resynchConfigurationFiles();
         fcUser = fcserver.getUser(fcUserName);
         if (fcUser == null) {
           throw new Exception("FileCatalyst user could not be created with user name '" + fcUserName + "'");
         }
         return;
       } else {
         fcserver.modUserPassword(fcUserName, fcPassword);
         return;
       }
     } catch (AdminConnectionException e) {
       // conection foobared.  Let's try again
       retryAttempts++;
     }
   }
   throw new Exception("Cannot connect to FCServer, reached max attempts");
}

모바일 API를

쉽게 애플 iOS 및 구글 안드로이드에 대한 빠른 파일 전송 응용 프로그램을 만들 수 있습니다. FileCatalyst는 iOS 및 안드로이드 달빅을위한 자바 API에 대한 기본 목표 - C API를 제공합니다.

모바일 API를 사용하여 내장, 우리 FileCatalyst의 응용 프로그램에 사용할 수 있습니다 기계적 인조 인간아이폰 OS.

//
//  FCAViewController.m
//  example
//
//  Copyright (c) 2012 Unlimi-Tech Software Inc.. All rights reserved.
//
//  This sample code will upload and then download a file named
//  "nature-q-c-320-320-7.jpg" (bundled with the SDK)

#import "FCAViewController.h"
#import "NSString+FCAUtils.h"

@interface FCAViewController ()

@property (strong, nonatomic) FCAControl *control;

@end

@implementation FCAViewController
@synthesize connectionStatusLabel;
@synthesize connectionDetailLabel;
@synthesize transferStatusLabel;
@synthesize transferDetailLabel;
@synthesize cancelButton;
@synthesize downloadButton;
@synthesize uploadButton;
@synthesize connectButton;
@synthesize control;


- (void)reportError:(NSError*)error {
    if (!error) return;

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error"
                                                    message:error.localizedDescription
                                                   delegate:nil
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}

// Basic file upload. The control instance has its own private work queue that all commands (except cancelTransfer) must
// be executed on. To do this, there are two helper methods, performBlock:completion: and performBlockAndWait:
// If any command inside the block fails, it will be reported in the NSError instance passed to the completion block,
// or returned from the performBlockAndWait: call.

- (IBAction)uploadAction:(id)sender {
    [self.uploadButton setTitle:@"Uploading..." forState:UIControlStateNormal];
    self.uploadButton.enabled = NO;

    [self.control performBlock:^{
        NSString *filename = @"nature-q-c-320-320-7.jpg";
        NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"nature-q-c-320-320-7" ofType:@"jpg"]];

        [control uploadFile:fileURL toPath:filename transferStarted:^(FCAFileTransferStats *stats) {
            // this callback is invoked on the main queue
            self.transferStatusLabel.text = filename;
            self.cancelButton.hidden = NO;
            NSLog(@"transfer has started");
        } transferCompleted:^(FCAFileTransferStats *stats) {
            // this callback is invoked on the main queue
            NSLog(@"transfer has completed");
            self.transferStatusLabel.text = [NSString stringWithFormat:@"%@ finished", filename];
            self.cancelButton.hidden = YES;
        }];

    } completion:^(NSError *error) {
        [self reportError:error];
        [self.uploadButton setTitle:@"Test Upload" forState:UIControlStateNormal];
        self.uploadButton.enabled = YES;
    }];
}

- (IBAction)downloadAction:(UIButton *)sender {
    [self.downloadButton setTitle:@"Downloading..." forState:UIControlStateNormal];
    self.downloadButton.enabled = NO;

    [self.control performBlock:^{
        NSString *filename = @"nature-q-c-320-320-7.jpg";
        NSURL *documentsDirectory = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory
                                                                            inDomains:NSUserDomainMask] lastObject];
        NSURL *fileURL = [documentsDirectory URLByAppendingPathComponent:filename];

        [control downloadFile:filename
                        toURL:fileURL
              transferStarted:^(FCAFileTransferStats *stats) {
                  self.transferStatusLabel.text = filename;
                  self.cancelButton.hidden = NO;

              } transferCompleted:^(FCAFileTransferStats *stats) {
                  self.transferStatusLabel.text = [NSString stringWithFormat:@"%@ finished", filename];
                  self.cancelButton.hidden = YES;
              }];
    } completion:^(NSError *error) {
        [self reportError:error];
        [self.downloadButton setTitle:@"Test Download" forState:UIControlStateNormal];
        self.downloadButton.enabled = YES;
    }];
}

// This method shows how to use the nonblocking connect/disconnect calls
- (IBAction)connectAction:(UIButton *)sender {
    if ([self.control isConnected]) {
        sender.enabled = NO;
        [sender setTitle:@"Disconnecting..." forState:UIControlStateNormal];

        [self.control performBlock:^{
            [self.control disconnect];
        } completion:^(NSError *error) {
            sender.enabled = YES;
            [self reportError:error];
        }];
    } else {
        sender.enabled = NO;
        [sender setTitle:@"Connecting..." forState:UIControlStateNormal];

        [self.control performBlock:^{
            [self.control connect];
        } completion:^(NSError *error) {
            sender.enabled = YES;
            [self reportError:error];
        }];
    }
}

- (IBAction)cancelAction:(UIButton *)sender {
    [self.control cancelTransfer];
}


- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // create an FCAControl instance and set the connection options
        self.control = [[FCAControl alloc] init];
        self.control.username = @"user";
        self.control.password = @"test";
        self.control.hostname = @"10.0.1.2";
        self.control.port = 8123;

        // some options that are not required to set
        control.useSSL = NO;
        control.autoResumeEnabled = NO;
        control.fileExistsOverride = YES;
    }
    return self;
}

- (void)configureControlStats {
    self.connectionDetailLabel.text = [NSString stringOfTransferRate:self.control.bitsPerSecondAverageTransferRate];
}

- (void)configureView {
    NSString *connectionStatus = nil;

    if ([self.control isConnected]) {
        [self.connectButton setTitle:@"Disconnect" forState:UIControlStateNormal];
        self.uploadButton.hidden = NO;
        self.downloadButton.hidden = NO;
        connectionStatus = @"connected";
    } else {
        [self.connectButton setTitle:@"Connect" forState:UIControlStateNormal];
        self.uploadButton.hidden = YES;
        self.downloadButton.hidden = YES;
        connectionStatus = @"not connected";
    }

    self.connectionStatusLabel.text = [NSString stringWithFormat:@"%@:%d (%@)",
                                       self.control.hostname, self.control.port, connectionStatus];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    // there are notifications for the connect and disconnect events
    [[NSNotificationCenter defaultCenter] addObserverForName:FCAControlConnectedKey
                                                      object:self.control
                                                       queue:[NSOperationQueue mainQueue]
                                                  usingBlock:^(NSNotification *note) {
                                                      [self configureView];
                                                  }];

    [[NSNotificationCenter defaultCenter] addObserverForName:FCAControlDisconnectedKey
                                                      object:self.control
                                                       queue:[NSOperationQueue mainQueue]
                                                  usingBlock:^(NSNotification *note) {
                                                      [self configureView];
                                                  }];

    // during transfers, the Control instance will periodically send out a notification with updated
    // connection statistics
    [[NSNotificationCenter defaultCenter] addObserverForName:FCAControlUpdatedKey
                                                      object:self.control
                                                       queue:[NSOperationQueue mainQueue]
                                                  usingBlock:^(NSNotification *note) {
                                                      [self configureControlStats];
                                                  }];


    [self configureView];
}

- (void)viewDidUnload
{
    [self setConnectionStatusLabel:nil];
    [self setConnectionDetailLabel:nil];
    [self setTransferStatusLabel:nil];
    [self setTransferDetailLabel:nil];
    [self setCancelButton:nil];
    [self setDownloadButton:nil];
    [self setUploadButton:nil];
    [self setConnectButton:nil];
    [super viewDidUnload];
    // Release any retained subviews of the main view.
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
    } else {
        return YES;
    }
}

@end
달빅 코드의 경우를 참조하십시오 클라이언트 API 견본. [/ 창] / 아코디언]

HotFolder REST API

HotFolder REST API는 작업을 실행 / 새로운 감시 폴더를 추가 새로운 사이트를 추가하고, 생성 / 조작하는 방법을 제공합니다.

TransferAgent 자바 스크립트와 REST API

TransferAgent 자바 스크립트와 REST API는 모든 웹 응용 프로그램과의 긴밀한 통합 할 수 있습니다. 그것은, 로컬 파일 시스템을 검색 큐에 파일을 추가, 시작 및 진행중인 파일 전송을 모니터링 / 액세스 웹 애플리케이션을 할 수 있습니다. 이 모든 REST 호출을 통해 자바 스크립트하지만, 직접 수행 할 수 있습니다.

중앙 REST API

FileCatalyst 중앙 API는 연결된 모든 노드에 대한 모든보고 데이터에 대한 액세스를 제공하며 서버, HotFolder 및 TransferAgent (V3.7에서 오는)와 같은 개별 연결된 노드의 REST API에 액세스 할 수있는 역 HTTP 프록시 역할을합니다.

워크 플로우 REST API

FileCatalyst 워크 플로우를위한 편안하고 API는 웹을 통해 관리 기능들을 제공합니다. 이들은 다음을 포함한다 :
  • / 편집 / 삭제 사용자 추가
  • / 편집 / 삭제 그룹 추가
  • 주문 양식을 삭제 / 추가 / 수정
  • / 편집 / 삭제 FTP 사이트 추가
  • 목록 작업 필드

.NET 래퍼

닷넷 래퍼는 .NET에서 FileCatalyst 명령 줄에 투명하고 스레드 안전한 액세스를 제공합니다. 하나의 잠재적 인 응용 프로그램은 마이크로 소프트 개발 프레임 워크 내에서 개발하는 FileCatalyst 기술을 사용하는 것입니다. 닷넷 래퍼는 공식 자바 런타임 및 FileCatalyst CLI가 필요합니다. 샘플 스크린 샷을 보려면 클릭하세요

명령 줄 인터페이스

거의 모든 스크립트 언어를 통해 CLI 액세스 FileCatalyst 기능을 사용하여, 또는 여러 다른 프로그래밍 언어에서. 명령 줄에 출력 할 수있는 모든 도구는 FileCatalyst 파일 전송을 트리거하는 데 사용할 수 있습니다.

C ++ 네이티브 클라이언트 라이브러리

FileCatalyst products are built using Java as the main programming language. This has always allowed us to keep a centralized code base and be compatible across multiple platforms and browsers (via Java Applet Plugin). 95% of systems (desktop/laptop/servers) found on the market today, including Windows, MacOSX, Linux, Solaris, and AIX, can utilize our existing software.

그러나, 자바를 사용할 수없는 특정 시스템이있다. 셋톱 박스 및 임베디드 시스템 (네트워크 기기, 게임 콘솔) 많은 세트에서, 자바는 설치하거나 사용할 수 없습니다. 이 생태계는 우리의 솔루션을 활용 할 수 없습니다.

이러한 관점에서, 우리는 C ++ 클라이언트 솔루션을 개발했습니다. 네이티브 C ++ API를 모두이나 기본 명령 줄 실행 파일 (윈도우, 리눅스 32 비트 또는 64 비트 바이너리에 대한 .exe)을, 우리의 FileCatalyst C ++ 클라이언트는 자바가 설치되어 있지 않은 시스템에서 파일 전송을 가속 수로 사용할 수 있습니다.

 

C ++ 웹 세미나

#include <FileCatalyst.hpp>

void example( const std::string &serverIpOrHostname, 
              const std::string &username, 
              const std::string &password )
{
    // Set a few options needed by fc::Control so it knows how to behave.
    fc::Options options;
    options.setFtpServer( serverIpOrHostname, 21 );
    options.setUsernameAndPassword( username, password );
    options.setMd5Verification( true );
    options.setMode( fc::kUdp );
    // Create the FTP fc::Control object.  Once it is created, the
    // fc::Options object is no longer required and can go out-of-scope.
    fc::Control ftp( options );
    // Connect to the server with the options originally provided by
    // fc::Options.  If connect() is not explicitly called, then the
    // connection is deferred until a method is called which needs to
    // communicate directly with the server.
    ftp.connect();
    // Note that even after a connection has been established, many (but
    // not all) FTP settings can still be modified.
    fc::Options newOptions = ftp.getOptions();
    newOptions.setBandwidth( fc::k100_Mbps );
    ftp.setNewOptions( newOptions );
    // Download some files from the server.
    ftp.prepareRecursiveDir( fc::Remote("/project"), fc::Local("/tmp") );
    ftp.download();
    ...
}
우리는 현재 다음과 같은 플랫폼 라이브러리를 이식했다 :
    • Windows 32 비트
    • 윈도우 64 비트
  • 리눅스 64 비트 (뎁)
  • 리눅스 64 비트 (.rpm을)
  • 리눅스 ARM 7 32 비트 (뎁)
  • 리눅스 ARM 7 32 비트 (.rpm을)
  • OSX 64 비트

특정 플랫폼에 포트를 필요로하는 경우, 세부 사항에 저희에게 연락.

요청 시험