Facile integrazione!

FileCatalyst offre molte opzioni per l'integrazione nelle applicazioni e nei flussi di lavoro di 3rd party. Il nostro SDK vanta una gamma completa di componenti per una varietà di linguaggi di sviluppo e ambienti.

Prodotto API disponibili Impiego
FileCatalyst Server Java, CLI, REST Amministrazione di FileCatalyst Server (Esempio: Aggiungi / Rimuovi utenti, Gestisci trasferimenti correnti
FileCatalyst Hotfolder REST Controllo completo di tutta l'applicazione (Esempio: Aggiungi nuovo sito, Modifica scheduler, Cambia larghezza di banda)
FileCatalyst TransferAgent JavaScript, REST Integra i trasferimenti web all'interno di qualsiasi applicazione web (Esempio: ottieni file locali / remoti, esegui il caricamento)
FileCatalyst Mobile Android, iOS, C ++ Integrare il trasferimento di file accelerato all'interno di qualsiasi applicazione mobile
API client di FileCatalyst Java, C ++, CLI, .NET Integrazione in applicazioni desktop
Invio del lavoro del flusso di lavoro FileCatalyst Java Integra l'invio / distribuzione del lavoro in qualsiasi applicazione.
Amministrazione del flusso di lavoro FileCatalyst REST Integrare la creazione di utenti, campi e moduli
FileCatalyst Central REST Gestisci, controlla l'intera distribuzione di FileCatalyst. Controlla a distanza qualsiasi nodo connesso. Esegui trasferimenti in remoto
FileCatalyst TransferController REST Integrazione dei trasferimenti da nodo a nodo in qualsiasi applicazione

* Trasferisci solo da e verso il flusso di lavoro e le aree del file Webmail.

Il kit di sviluppo è la base dei nostri prodotti; se possiedi prodotti qualificanti, il kit di sviluppo può essere concesso in licenza come componente aggiuntivo. Per lo sviluppo autonomo, l'SDK viene in genere aggiunto a FileCatalyst Direct; tuttavia, alcuni componenti sono progettati per interagire con FileCatalyst Workflow.

Guarda il nostro webinar Java SDK

Scarica l'accompagnamento esempio codice sorgente qui

Guarda il nostro webinar su C ++ SDK

API client

La nostra API ben documentata consente di accedere a tutti i metodi necessari per stabilire una connessione a un server FileCatalyst per trasferimenti di file accelerati. Con poche righe di codice, puoi essere in corso. I valori predefiniti vengono utilizzati per la maggior parte delle funzioni, con una gamma completa di chiamate ai metodi che consentono di accedere a funzioni avanzate.

L'API client consente inoltre di inviare in modo programmatico lavori e file a FileCatalyst Workflow o Webmail.

import unlimited.fc.client.api. *;
import java.io. *;

UploadSample di classe pubblica {
public static void main (String args []) genera Exception {

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

// Imposta la frequenza iniziale e la frequenza target allo stesso modo. Rallenterà se si incontra la congestione.
fc.setStartRate (10000);
fc.setTargetRate (10000);
fc.setVerifyIntegrity (true);
TransferHook upload = fc.upload (nuovo file ("c: /temp/500MB.zip"));

while (! upload.isTransferComplete ()) {
// puoi visualizzare alcune informazioni sui progressi qui utilizzando i vari metodi in
// l'oggetto TransferHook

if (upload.getStatusCode () == upload.TRANSFERRING) {
System.out.println (upload.getPercent () + "%" + upload.getRate () + "Kbps");
}

provare {
Thread.sleep (1000);
}
catch (InterruptedException ex) {
}
}

// disconnetti dal server
fc.disconnect ();

// pulire
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;

/ **
* Questo esempio illustra l'uso di Observables per monitorare un oggetto TransferHook.
*/

public class UploadSampleAdvanced implements Observer {

TransferHook upload = null;

public void go () genera IOException, FCException {

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

// Rileviamo automaticamente la modalità di trasferimento. A meno che RTT non sia sufficientemente alto, viene utilizzato FTP.
fc.setMode (TransferMode.AUTO);

// consente di inviare a un 1500 Kbps costante, senza controllo della congestione.
// il controllo della congestione entra in gioco solo se FC viene rilevata come la migliore modalità di trasferimento
fc.setUseCongestionControl (false);
fc.setTargetRate (1500);

// verifica il file in seguito
fc.setVerifyIntegrity (true);
upload = fc.upload (nuovo file ("c: / bigfiles / 500MB"));
upload.addObserver (questo);

provare {
sincronizzato (questo) {
aspettare();
}
}
catch (InterruptedException ex) {
}

// disconnetti dal server
fc.disconnect ();

// pulire
fc.finish ();
}

aggiornamento pubblico vuoto (Osservabile osservabile, Oggetto oggetto) {

if (! upload.isTransferComplete () &&! upload.isTransferCancelled () &&
! upload.isTransferError ()) {
if (upload.getStatusCode () == upload.TRANSFERRING &&
upload.getCurrentPercent ()! = 100) {
printProgress (upload.getRate (), upload.getCurrentPercent ());
}
altrimenti se (upload.getStatusCode () == upload.DONEFILE) {
printProgress (upload.getRate (), 100);
}
}
else {
// tutti i file sono completi
sincronizzato (questo) {
notifyAll ();
}
}
}

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

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

API Server

Le API Server Java e REST espongono ogni metodo necessario per gestire gli utenti e richiedere informazioni sulla sessione su FileCatalyst Server.

L'API client consente inoltre di inviare in modo programmatico lavori e file a FileCatalyst Workflow o Webmail.

// Esempio di seguito è un codice di esempio in cui l'applicazione tenta di creare un utente e
// avvolge la logica per i tentativi di riconnessione in caso di comunicazione tra ServerAPI
// e il server viene interrotto.

// Chiama per impostare la connessione iniziale a FileCatalyst Server
public void init () genera Exception {
FCServer fcserver = new FCServer ();
// parametri di connessione
fcserver.setHostname ( "localhost");
fcserver.setPort (12400);
fcserver.setUserName ( "admin");
fcserver.setPassword ( "sistema");
// Collegare
fcserver.connect ();
}

// tenta una riconnessione
private void riconnect () genera Exception {
provare {
fcserver.disconnect ();
} catch (Exception e) {
}
fcserver.connect ();
}

//
// Metodo per modificare le credenziali di accesso per un utente. Se l'utente non esiste ancora, crea il
// anche utente.
// @param fcUserName Nome di accesso FTP
// @param fcPassword Password che l'utente vuole avere
// @ elimina Eccezione Se non è possibile connettersi al server dopo i tentativi di 3, o il server non lo consente
// crea / modifica l'utente.
//
public void createOrModifyUserCredentials (String fcUserName, String fcPassword) genera Exception {
// Ottieni l'utente FileCatalyst.
int MAXATTEMPTS = 3;
UserContainer fcUser = null;
int retryAttempts = 0;
while (fcUser == null && retryAttempts <MAXATTEMPTS) {// prova a connetterti se abbiamo perso la connessione se (! Fcserver.isConnected ()) {reconnect (); } prova {fcUser = fcserver.getUser (fcUserName); if (fcUser == null) {// null return indica che l'utente non esiste - create fcserver.addUser (fcUserName, fcPassword); // prova per vedere se l'utente è veramente lì fcserver.resynchConfigurationFiles (); fcUser = fcserver.getUser (fcUserName); if (fcUser == null) {throw new Exception ("Non è stato possibile creare l'utente FileCatalyst con nome utente" "+ fcUserName +" '"); } ritorno; } else {fcserver.modUserPassword (fcUserName, fcPassword); ritorno; }} catch (AdminConnectionException e) {// conection foobared. Proviamo di nuovo retryAttempts ++; }} lancia nuove eccezioni ("Impossibile connettersi a FCServer, ha raggiunto i max tentativi"); }

API mobile

Crea facilmente applicazioni di trasferimento file veloci per Apple iOS e Google Android. FileCatalyst fornisce un'API Objective-C nativa per iOS e un'API Java per Android Dalvik.

Realizzato utilizzando l'API mobile, la nostra app FileCatalyst è ora disponibile per Android
e iOS.

//
// FCAViewController.m
// esempio
//
// Copyright (c) 2012 Unlimi-Tech Software Inc .. Tutti i diritti riservati.
//
// Questo codice di esempio caricherà e quindi scaricherà un file chiamato
// "nature-qc-320-320-7.jpg" (in bundle con l'SDK)

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

@interface FCAViewController ()

@property (strong, nonatomic) controllo FCAControl *;

@fine

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

- (void) errorError: (NSError *) error {
se (! errore) ritorno;

UIAlertView * alert = [[UIAlertView alloc] initWithTitle: @ "Errore"
messaggio: error.localizedDescription
delegato: nil
cancelButtonTitle: @ "OK"
otherButtonTitles: nil];
[avviso spettacolo];
}

// Caricamento di file di base. L'istanza di controllo ha una propria coda di lavoro privata che deve tutti i comandi (tranne cancelTransfer)
// essere eseguito su Per fare questo, ci sono due metodi di supporto, performBlock: completion: and performBlockAndWait:
// Se qualsiasi comando all'interno del blocco fallisce, verrà segnalato nell'istanza NSError passata al blocco di completamento,
// o restituito da performBlockAndWait: call.

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

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

[control uploadFile: fileURL toPath: filename transferStarted: ^ (FCAFileTransferStats * stats) {
// questa callback è invocata sulla coda principale
self.transferStatusLabel.text = nomefile;
self.cancelButton.hidden = NO;
NSLog (@ "trasferimento avviato");
} transferCompleted: ^ (FCAFileTransferStats * stats) {
// questa callback è invocata sulla coda principale
NSLog (@ "trasferimento completato");
self.transferStatusLabel.text = [NSString stringWithFormat: @ "% @ finished", nomefile];
self.cancelButton.hidden = YES;
}];

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

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

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

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

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

// Questo metodo mostra come utilizzare le chiamate di connessione / disconnessione non bloccanti
- (IBAction) connectAction: (UIButton *) mittente {
if ([self.control isConnected]) {
sender.enabled = NO;
[mittente setTitle: @ "Disconnecting ..." forState: UIControlStateNormal];

[self.control performBlock: ^ {
[disconnessione self.control];
} completamento: ^ (errore NSError *) {
sender.enabled = YES;
[self reportError: error];
}];
} Else {
sender.enabled = NO;
[mittente setTitle: @ "Connecting ..." forState: UIControlStateNormal];

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

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

- (id) initWithNibName: (NSString *) nibNameOrNil bundle: (NSBundle *) nibBundleOrNil {
self = [super initWithNibName: nibNameOrNil bundle: nibBundleOrNil];
se (auto) {
// crea un'istanza FCAControl e imposta le opzioni di connessione
self.control = [[FCAControl alloc] init];
self.control.username = @ "utente";
self.control.password = @ "test";
self.control.hostname = @ "10.0.1.2";
self.control.port = 8123;

// alcune opzioni che non sono obbligatorie da impostare
control.useSSL = NO;
control.autoResumeEnabled = NO;
control.fileExistsOverride = YES;
}
ritorno di sé;
}

- (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 = @ "non connesso";
}

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

- (void) viewDidLoad
{
[super viewDidLoad];

// ci sono notifiche per gli eventi connect e disconnect
[[NSNotificationCenter defaultCenter] addObserverForName: FCAControlConnectedKey
oggetto: self.control
coda: [NSOperationQueue mainQueue] usingBlock: ^ (NSNotification * note) {
[auto configureView];
}];

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

// durante i trasferimenti, l'istanza di Controllo invierà periodicamente una notifica con l'aggiornamento
// statistiche di connessione
[[NSNotificationCenter defaultCenter] addObserverForName: FCAControlUpdatedKey
oggetto: self.control
coda: [NSOperationQueue mainQueue] usingBlock: ^ (NSNotification * note) {
[self configureControlStats];
}];

[auto 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];
// Rilascia qualsiasi sottoview mantenuta della vista principale.
}

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

@fine

Per il codice Dalvik, vedere il API client campione.

API REST di HotFolder

L'API REST di HotFolder espone metodi per aggiungere nuove cartelle di controllo, aggiungere nuovi siti e creare / manipolare / eseguire attività.

API JavaScript e REST di TransferAgent

Le API JavaScript e REST di TransferAgent consentono una stretta integrazione con qualsiasi applicazione web. Consente alle applicazioni Web di accedere / sfogliare i file system locali, aggiungere file a una coda, avviare e monitorare i trasferimenti di file in corso. Tutto questo può essere fatto attraverso JavaScript o direttamente attraverso le chiamate REST.

API REST centrale

L'API FileCatalyst Central fornisce l'accesso a tutti i dati dei rapporti per tutti i nodi connessi e agisce anche come proxy HTTP inverso per accedere alle API REST dei singoli nodi connessi, come Server, HotFolder e TransferAgent (in arrivo in v3.7).

API REST del flusso di lavoro

Un'API RESTful per FileCatalyst Workflow espone un numero di funzioni di gestione attraverso il web. Questi includono:

  • Aggiungi / Modifica / Elimina utenti
  • Aggiungi / Modifica / Elimina gruppi
  • Aggiungi / modifica / cancella i moduli d'ordine
  • Aggiungi / Modifica / Elimina siti FTP
  • Elenca campi di lavoro

.NET Wrapper

Il wrapper .NET offre un accesso trasparente e thread-safe alla riga di comando FileCatalyst in .NET. Una potenziale applicazione è da utilizzare
Tecnologia FileCatalyst da sviluppare all'interno del framework di sviluppo Microsoft. Il wrapper .NET richiede un runtime Java ufficiale e CLI FileCatalyst.

clicca per vedere lo screenshot del campione

Interfaccia della riga di comando

Utilizzando la CLI, accedi alla funzionalità di FileCatalyst attraverso praticamente qualsiasi linguaggio di scripting o da molti altri linguaggi di programmazione. È possibile utilizzare qualsiasi strumento in grado di eseguire l'output sulla riga di comando per attivare i trasferimenti di file FileCatalyst.

C ++ Native Client Library

I prodotti FileCatalyst sono costruiti utilizzando Java come linguaggio di programmazione principale. Questo ha sempre
ci ha permesso di mantenere una base di codice centralizzata ed essere compatibili su più piattaforme e browser
(tramite Java Applet Plugin). 95% di sistemi (desktop / laptop / server) trovati oggi sul mercato, inclusi
Windows, MacOSX, Linux, Solaris e AIX possono utilizzare il nostro software esistente.

Tuttavia, ci sono alcuni sistemi in cui Java non è disponibile. In molti set top box e sistemi embedded
(appliance di rete, console di gioco), Java non è installato o disponibile. Questo ecosistema non è stato in grado di prendere
vantaggio delle nostre soluzioni.

Alla luce di ciò, abbiamo sviluppato una soluzione client C ++. Disponibile sia come API C ++ nativa che come nativo
eseguibile da riga di comando (.exe per Windows, 32 o 64-bit binary per Linux), il nostro client FileCatalyst C ++
consentire l'accelerazione del trasferimento dei file su sistemi in cui non è installato Java.

Guarda il nostro webinar C ++

#includere

esempio void (const std :: string & serverIpOrHostname,
const std :: string e username,
const std :: string & password)
{
// Imposta alcune opzioni necessarie per fc :: Control in modo che sappia come comportarsi.
fc :: Opzioni opzioni;
options.setFtpServer (serverIpOrHostname, 21);
options.setUsernameAndPassword (username, password);
options.setMd5Verification (true);
options.setMode (fc :: kUdp);
// Crea l'oggetto FTP fc :: Control. Una volta creato, il
// fc :: L'oggetto Options non è più necessario e può andare fuori campo.
fc :: Control ftp (opzioni);
// Connetti al server con le opzioni originariamente fornite da
// fc :: Opzioni. Se connect () non viene chiamato esplicitamente, allora il
// la connessione viene posticipata fino a quando non viene chiamato un metodo che deve
// comunica direttamente con il server.
ftp.connect ();
// Si noti che anche dopo aver stabilito una connessione, molti (ma
// non tutto) Le impostazioni FTP possono ancora essere modificate.
fc :: Options newOptions = ftp.getOptions ();
newOptions.setBandwidth (fc :: k100_Mbps);
ftp.setNewOptions (newOptions);
// Scarica alcuni file dal server.
ftp.prepareRecursiveDir (fc :: Remote ("/ project"), fc :: Local ("/ tmp"));
ftp.download ();
...
}

Al momento abbiamo portato la libreria alle seguenti piattaforme:

    • Finestre 32 bit
    • Finestre 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

Se hai bisogno di una porta per una piattaforma specifica, contattaci con i dettagli.