FileCatalyst poskytuje mnoho možností pro integraci do aplikací a pracovních postupů 3. stran. Naše SDK se může pochlubit celou řadu prvků pro různé vývojových jazycích a prostředích.

žádost o Trial

Komponent Technologie FileCatalyst Product
klient API Java, C ++ *, iOS * Android * .NET * Direct, Workflow
Java applety, JavaScript API Jakékoli nedávný webový prohlížeč s Java Plug-in Přímo
Vzdálená správa Java, REST Direct, Workflow
CLI / Shell Scripting Příkazový řádek* Direct, Workflow
C ++ API / CLI Non-Java příkazového řádku a API Přímo
* Transfer do az Workflow a pouze webové pošty oblastí souborů.

Vývoj Kit je základem našich výrobků; pokud vlastníte nějaké kvalifikační produkty, může být Development Kit licencován jako add-on. Pro samostatný rozvoj, SDK se typicky přidává k FileCatalyst Direct; Nicméně, některé komponenty jsou navrženy tak, aby komunikovat s FileCatalyst Workflow.

Watch SDK Webinář

Ke stažení doprovodný příklad zdrojový kód zde

klient API

Náš dobře zdokumentované API umožňuje přístup ke všem potřebným způsobem navázat připojení k serveru pro FileCatalyst urychleného přenosu souborů. S několika málo řádků kódu, můžete být v plném proudu. Výchozí hodnoty jsou používány pro většinu funkcí, s celou řadu volání metody umožňující přístup k pokročilé funkce.

Klient API také umožňuje programově odesílat úlohy a soubory FileCatalyst Workflow nebo webmailu.

importovat unlimited.fc.client.api *. import java.io. *; public class UploadSample {public static void main (String args []) hodí Výjimka {FCClient fc = nový FCClient ( "192.168.1.30", 21); fc.setShowConsoleLog (true); fc.initialize (); fc.connect (); fc.login ( "anonymní", "me@email.com"); fc.setMode (TransferMode.UDP); // Nastavení počáteční rychlosti a cílové sazby stejné. Bude se zpomalí, pokud přetížení narazil. fc.setStartRate (10000); fc.setTargetRate (10000); fc.setVerifyIntegrity (true); TransferHook nahrání = fc.upload (new File ( "c: /temp/500MB.zip")); while (! upload.isTransferComplete ()) {// můžete zde zobrazit nějaké informace o postupu pomocí různých metod // objektu TransferHook if (upload.getStatusCode () == upload.TRANSFERRING) {System.out.println (upload .getPercent () + "% "+ upload.getRate () +" kb"); } Try {Thread.sleep (1000); } Catch (InterruptedException ex) {}} // odpojit od serveru fc.disconnect (); // uklidit 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 serveru

Java Server a rozhraní REST API vystavit všechny metody potřebné pro správu uživatelů a žádost o relaci informace o FileCatalyst serveru.

// 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");
}

Mobilní APIs

Snadno vytvořit rychlý přenos souborů aplikace pro Apple iOS a Google Android. FileCatalyst poskytuje nativní Objective-C API pro iOS a Java API pro Android Dalvik.

Vytvořené pomocí mobilního rozhraní API, naše FileCatalyst aplikace je nyní k dispozici pro Robot a iOS.

//
//  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
Pro Dalvik kód, naleznete v části klient API vzorek. [/ Tabule] [/ akordeon]

HotFolder REST API

HotFolder REST API vystavuje metody k přidání nových sledovaných složek, přidávat nové stránky a vytvořit / manipulovat / spuštění úlohy.

TransferAgent JavaScript a REST API

TransferAgent JavaScript a REST API umožňují těsné integraci s jakýmkoliv webové aplikace. To umožňuje webovým aplikacím přístup / procházet místních systémů souborů Přidání souborů do fronty, iniciovat a sledovat probíhající přenos souborů. To vše lze provést i když JavaScript, nebo přímo přes REST hovorů.

Centrální REST API

FileCatalyst Central API umožňuje přístup ke všem vykazování dat pro všechny připojené uzly, a také působí jako reverzní proxy HTTP pro přístup ke zbývajícím API jednotlivých propojených uzlů, jako je Server, Hotfolder a TransferAgent (přilétl v3.7).

Workflow REST API

Klidný API pro FileCatalyst Workflow odhaluje celou řadu funkcí pro správu přes web. Tyto zahrnují:
  • Přidat / měnit / mazat uživatele
  • Přidat / editovat / mazat skupiny
  • Přidat / Upravit / Odstranit Objednávkový blok
  • Přidat / Upravit / Odstranit FTP servery
  • Seznam úloh Fields

.NET Wrapper

.NET wrapper nabízí transparentní a thread-safe přístup do příkazového řádku FileCatalyst v .NET. Jedním z možných aplikací je použití technologie FileCatalyst rozvíjet v rámci vývojového rámce Microsoft. .NET wrapper vyžaduje oficiální Java Runtime a FileCatalyst CLI. klikněte pro zobrazení ukázkové obrazovky

Command Line Interface

Používání CLI, přístup k funkcím FileCatalyst přes prakticky jakýkoli skriptovací jazyk, nebo z mnoha dalších programovacích jazyků. Jakýkoliv nástroj schopný výstup do příkazového řádku může být použita ke spuštění FileCatalyst přenosy souborů.

C ++ Native Client Library

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.

Nicméně, tam jsou některé systémy, kde Java není k dispozici. V mnoha set top boxů a vestavěné systémy (Network Appliance, herní konzole), Java není nainstalována nebo není dostupný. Tento ekosystém nebyl schopen využít našich řešení.

S ohledem na to, jsme vyvinuli C ++ klienta řešení. K dispozici jako oba nativní C ++ API, nebo jako nativní příkazového řádku spustitelný soubor (EXE pro Windows, 32 nebo 64-bitové binární pro Linux), náš FileCatalyst C ++ klient umožní zrychlení přenosu souborů v systémech, které nemají nainstalovanou Javu.

 

C ++ Webinar

#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();
    ...
}
V současné době jsme se přenést do knihovny na následujících platformách:
    • Windows 32-bit
    • Windows 64-bit
  • Linux 64-bit (DEB)
  • Linux 64-bit (.rpm)
  • Linux ARM 7 32-bit (DEB)
  • Linux ARM 7 32-bit (.rpm)
  • OSX 64-bit

Požadujete-li port na konkrétní platformu, obraťte se na nás s detaily.

žádost o Trial