> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# FTP Read Konnektör

> FTP bağlantı tanımlarını kullanarak dosya arama, okuma ve farklı formatlarda içerik alma işlemlerini gerçekleştirebilirsiniz. Sunucularınız veya farklı ortamlarınızdaki dosyaları belirli kriterlere göre arayabilir, okuyabilir, çeşitli çıktı formatlarıyla içeriklerini alabilir ve bu işlemleri gerçekleştirip sonuç dönen API Proxy'ler oluşturabilirsiniz.

<img src="https://mintcdn.com/apinizer/-OUVpYz7x56LFQ3F/images/yonetici/konnektor/ftp-read.png?fit=max&auto=format&n=-OUVpYz7x56LFQ3F&q=85&s=ac663330850940a0754f57c855abe9d5" alt="FTP Read Konnektör Konfigürasyonu" width="800" className="mr-auto" data-path="images/yonetici/konnektor/ftp-read.png" />

<CardGroup cols={3}>
  <Card title="Dosya Erişimi" icon="file">
    FTP sunucularınız ya da farklı ortamlarınızdaki dosya içeriklerine erişebilirsiniz.
  </Card>

  <Card title="Dosya Arama" icon="magnifying-glass">
    Belirli kriterlere ve desenlere göre dosya arayabilirsiniz.
  </Card>

  <Card title="Format Dönüşümü" icon="arrows-rotate">
    Dosya içeriklerini farklı formatlarda (JSON, ZIP, MTOM) indirebilirsiniz.
  </Card>
</CardGroup>

## Kullanım

<Info>
  Oluşturacağınız FTP dosya okuma konnektörü sayesinde, FTP sunucusundan dosya okuma işlemlerini gerçekleştirebilirsiniz. Bu konnektör, dosya adı desenlerine göre, joker karakter eşleştirmesi ve tam eşleşme gibi esnek arama kriterleri ile birlikte çeşitli formatlarda çıktı üretebilme imkanı sunarak ihtiyacınıza uygun çözümler geliştirmenizi sağlar.
</Info>

Konnektör, JSON gövdeli HTTP POST isteği kabul eder. İstek gövdesi boş gönderilirse, varsayılan değerler kullanılır.

## HTTP İsteği

```bash theme={null}
curl --location --request POST "https://<APINIZER_ACCESS_URL>/<RELATIVE_PATH>" \
  -H "Content-Type: application/json" \
  --data-raw '{"searchType": "WILDCARD", "searchPattern": "*.json", "returnType": "ALL_MATCHES", "outputFormat": "JSON_BASE64"}'
```

## İstek Gövdesi Parametreleri

<AccordionGroup>
  <Accordion title="Dosya Arama Ayarları">
    <CardGroup cols={2}>
      <Card title="searchType" icon="magnifying-glass">
        **Tip:** string

        **Varsayılan Değer:** STARTS\_WITH

        **Açıklama:** Dosya adlarının nasıl aranacağını belirtir. Kullanılabilir seçenekler:

        * **STARTS\_WITH**: Dosya adının verilen desenle başlayıp başlamadığını kontrol eder
        * **EXACT\_MATCH**: Verilen dosya adı ile tam eşleşme kontrolü yapar
        * **CONTAINS**: Dosya adının içinde verilen deseni içerip içermediğini kontrol eder
        * **ENDS\_WITH**: Dosya adının verilen desenle bitip bitmediğini kontrol eder
        * **WILDCARD**: Joker karakter eşleştirmesi kullanır (\* herhangi bir dizi ile eşleşir, ? tek karakter ile eşleşir)
      </Card>

      <Card title="searchPattern" icon="filter">
        **Tip:** string

        **Varsayılan Değer:** (boş - tüm dosyaları döndürür)

        **Açıklama:** Aranacak dosya adı veya deseni. Kullanım searchType'a göre değişir:

        * WILDCARD için: `*.json`, `dosya?.txt`, `fatura_*.pdf`
        * ENDS\_WITH için: `.json`, `.pdf`, `.xml`
        * STARTS\_WITH için: `fatura_`, `rapor`, `veri`
        * CONTAINS için: `2025`, `test`, `_yedek`
        * EXACT\_MATCH için: `rapor.pdf`, `ayar.json`
      </Card>

      <Card title="caseInsensitive" icon="font">
        **Tip:** boolean

        **Varsayılan Değer:** true

        **Açıklama:** Dosya adı aramasının büyük/küçük harf duyarlı olup olmayacağını belirler. true olduğunda "Dosya.txt" ve "dosya.txt" aynı kabul edilir.
      </Card>

      <Card title="returnType" icon="list">
        **Tip:** string

        **Varsayılan Değer:** ALL\_MATCHES

        **Açıklama:** Döndürülecek sonuç miktarını belirtir:

        * **FIRST\_MATCH**: Sadece ilk eşleşen dosyayı indirir ve aramayı durdurur. Hızlı bir şekilde tek bir dosyaya ihtiyacınız olduğunda kullanışlıdır.
        * **ALL\_MATCHES**: Tüm eşleşen dosyaları indirir. Birden fazla dosyayı işlemeniz gerektiğinde kullanın.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Dosya Boyutu Sınırlaması">
    <Card title="maxFileSizeKB" icon="gauge">
      **Tip:** integer

      **Varsayılan Değer:** (sınır yok)

      **Açıklama:** İndirilecek maksimum dosya boyutu kilobayt (KB) cinsinden. Bu boyuttan büyük dosyalar atlanır ve yanıta dahil edilmez.

      **Örnek:** `10240` değeri sadece 10 MB'a (10240 KB) kadar olan dosyaların indirileceği anlamına gelir.

      **Kullanım Amacı:** Çok büyük dosyaların indirilmesini ve bellek veya performans sorunlarına yol açmasını önler.
    </Card>
  </Accordion>

  <Accordion title="Çıktı Formatı Ayarları">
    <Card title="outputFormat" icon="file-code">
      **Tip:** string

      **Varsayılan Değer:** JSON\_BASE64

      **Açıklama:** Dosya içeriklerinin hangi formatta döndürüleceğini belirtir:

      * **JSON\_BASE64**: Dosya içerikleri JSON formatında Base64 kodlaması ile döndürülür. API entegrasyonları ve yapılandırılmış yanıt ihtiyacınız olduğunda en iyisidir.
      * **MTOM**: Dosyalar MTOM (Message Transmission Optimization Mechanism) formatında multipart SOAP mesajı olarak döndürülür. SOAP tabanlı entegrasyonlar için kullanışlıdır.
      * **ZIP**: Tüm eşleşen dosyalar tek bir ZIP arşivine paketlenir. Birden fazla veya büyük dosya indirmek için en verimli yöntemdir.

      <Warning>
        **MTOM** veya **ZIP** formatı kullanılırken, eğer hiç dosya bulunamazsa, yanıt HTTP 404 durum kodu ve hata mesajı döndürür. Sadece JSON\_BASE64 formatı boş dosya dizisi ile HTTP 200 döndürür.
      </Warning>
    </Card>
  </Accordion>
</AccordionGroup>

## Yanıt Formatı

Yanıt formatı `outputFormat` parametresine göre değişir:

### JSON\_BASE64 Formatı (Varsayılan)

**Başarılı Yanıt:**

```json theme={null}
{
  "count": 2,
  "files": [
    {
      "name": "fatura_2025_001.pdf",
      "data": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL...",
      "size": 245760
    },
    {
      "name": "fatura_2025_002.pdf",
      "data": "JVBERi0xLjQKJeLjz9MKMyAwIG9iago8PC9UeXBlL...",
      "size": 198432
    }
  ]
}
```

**Boş Yanıt (Dosya Bulunamadı):**

```json theme={null}
{
  "count": 0,
  "message": "No files found",
  "files": []
}
```

<Info>
  JSON\_BASE64 formatında `data` alanı Base64 kodlanmış dosya içeriğini barındırır. Gerçek dosya içeriğine erişmek için bu veriyi decode etmeniz gerekir.
</Info>

### ZIP Formatı

`outputFormat` değeri `ZIP` olarak ayarlandığında, tüm eşleşen dosyalar tek bir ZIP arşivine paketlenir ve binary veri olarak döndürülür.

**Başlıklar:**

* `Content-Type`: application/zip
* `Content-Disposition`: attachment; filename="ftp\_files.zip"

**Yanıt:** Binary ZIP dosya verisi

<Warning>
  Eğer hiç dosya bulunamazsa, HTTP 404 durum kodu ve hata mesajı döndürür: "No files found"
</Warning>

### MTOM Formatı

`outputFormat` değeri `MTOM` olarak ayarlandığında, dosyalar MTOM formatında multipart SOAP mesajı olarak döndürülür.

**Başlıklar:**

* `Content-Type`: multipart/related; boundary=...; type="application/xop+xml"

**Yanıt:** Dosya eklerini içeren multipart MTOM mesajı

<Warning>
  Eğer hiç dosya bulunamazsa, HTTP 404 durum kodu ve hata mesajı döndürür: "No files found"
</Warning>

## Örnek Senaryolar

### Örnek 1: JSON Formatı - İlk Eşleşme

**Kullanım Senaryosu**: "fatura\_2025\_" ile başlayan ilk dosyayı bul ve JSON formatında döndür. Maksimum 10 MB boyutundaki dosyaları kabul et.

**İstek:**

```json theme={null}
{
  "caseInsensitive": true,
  "searchType": "STARTS_WITH",
  "searchPattern": "fatura_2025_",
  "returnType": "FIRST_MATCH",
  "maxFileSizeKB": 10240,
  "outputFormat": "JSON_BASE64"
}
```

**Yanıt:**

```json theme={null}
{
  "count": 1,
  "files": [
    {
      "name": "fatura_2025_001.pdf",
      "data": "JVBERi0xLjQKJeLjz9MK...",
      "size": 245760
    }
  ]
}
```

### Örnek 2: ZIP - Tüm Eşleşmeler

**Kullanım Senaryosu**: Tüm PDF dosyalarını bul ve ZIP arşivi olarak indir.

**İstek:**

```json theme={null}
{
  "caseInsensitive": false,
  "searchType": "ENDS_WITH",
  "searchPattern": ".pdf",
  "returnType": "ALL_MATCHES",
  "outputFormat": "ZIP"
}
```

**Yanıt:** Tüm eşleşen PDF dosyalarını içeren binary ZIP dosyası.

### Örnek 3: MTOM Formatı

**Kullanım Senaryosu**: "payload.xml" adındaki dosyayı tam eşleşme ile bul ve SOAP entegrasyonu için MTOM formatında döndür.

**İstek:**

```json theme={null}
{
  "searchType": "EXACT_MATCH",
  "searchPattern": "payload.xml",
  "returnType": "FIRST_MATCH",
  "outputFormat": "MTOM"
}
```

**Yanıt:** Dosyanın eklendiği multipart MTOM mesajı.

### Örnek 4: Joker Karakter Deseni - Tüm JSON Dosyaları

**Kullanım Senaryosu**: Dizindeki tüm JSON dosyalarını joker karakter deseni kullanarak bulma.

**İstek:**

```json theme={null}
{
  "searchType": "WILDCARD",
  "searchPattern": "*.json",
  "returnType": "ALL_MATCHES",
  "outputFormat": "JSON_BASE64"
}
```

Bu desen şu dosyalarla eşleşir: `ayar.json`, `veri.json`, `rapor.json`

### Örnek 5: Karmaşık Joker Karakter Deseni

**Kullanım Senaryosu**: Tek karakter joker karakteri ile belirli desene uyan dosyaları bulma.

**İstek:**

```json theme={null}
{
  "searchType": "WILDCARD",
  "searchPattern": "rapor_2025_0?.pdf",
  "caseInsensitive": true
}
```

Bu desen şu dosyalarla eşleşir:

* ✅ `rapor_2025_01.pdf`
* ✅ `rapor_2025_09.pdf`
* ❌ `rapor_2025_10.pdf` (0'dan sonra iki basamak)
* ❌ `rapor_2024_01.pdf` (farklı yıl)

### Örnek 6: İçinde Belirli Metin Geçen Dosyalar

**Kullanım Senaryosu**: Adında "yedek" geçen tüm dosyaları bulma.

**İstek:**

```json theme={null}
{
  "searchType": "CONTAINS",
  "searchPattern": "yedek",
  "caseInsensitive": true,
  "maxFileSizeKB": 50000
}
```

Bu desen şu dosyalarla eşleşir: `gunluk_yedek.zip`, `yedek_2025.tar.gz`, `vt_yedek_tam.sql`

### Örnek 7: Büyük/Küçük Harfe Duyarlı Arama

**Kullanım Senaryosu**: Tam harf eşleşmesi ile dosya bulma.

**İstek:**

```json theme={null}
{
  "searchType": "STARTS_WITH",
  "searchPattern": "Rapor",
  "caseInsensitive": false
}
```

Bu desen:

* ✅ `Rapor_2025.pdf` ile eşleşir
* ❌ `rapor_2025.pdf` ile eşleşmez (küçük harf 'r')
* ❌ `RAPOR_2025.pdf` ile eşleşmez (tümü büyük harf)

## Hata Yönetimi

### JSON\_BASE64 Formatı

Her zaman HTTP 200 durum kodu döndürür. Dosya bulunamadığında:

```json theme={null}
{
  "count": 0,
  "message": "No files found",
  "files": []
}
```

### ZIP ve MTOM Formatları

Dosya bulunamadığında HTTP 404 durum kodu döndürür:

**Durum Kodu:** 404 Not Found

**Yanıt Gövdesi:** "No files found"

## En İyi Uygulamalar

<CardGroup cols={2}>
  <Card title="maxFileSizeKB Kullanın" icon="shield">
    Çok büyük dosyaların indirilmesini ve bellek sorunlarına yol açmasını önlemek için her zaman makul bir `maxFileSizeKB` sınırı belirleyin.
  </Card>

  <Card title="Doğru Formatı Seçin" icon="file-code">
    * API entegrasyonları ve yapılandırılmış yanıt için **JSON\_BASE64** kullanın
    * Birden fazla veya büyük dosya indirirken **ZIP** kullanın
    * **MTOM**'u sadece SOAP tabanlı entegrasyonlar için kullanın
  </Card>

  <Card title="FIRST_MATCH Kullanın" icon="gauge-high">
    Sadece bir dosyaya ihtiyacınız olduğunda, performansı artırmak için `returnType: "FIRST_MATCH"` kullanın. İlk eşleşmeden sonra arama durur.
  </Card>

  <Card title="Joker Karakterler" icon="wand-magic-sparkles">
    * `*` sıfır veya daha fazla karakter ile eşleşir
    * `?` tam olarak bir karakter ile eşleşir
    * Karmaşık desenler için birleştirin: `dosya_*.???` şu dosyalarla eşleşir `dosya_veri.txt`, `dosya_test.pdf`
  </Card>
</CardGroup>

## Performans İpuçları

<Info>
  * **FIRST\_MATCH** kullanımı: Sadece bir dosyaya ihtiyacınız varsa, ilk eşleşmeden sonra arama durduğu için performansı artırır
  * **maxFileSizeKB** sınırı: Bellek kullanımını kontrol altında tutar ve çok büyük dosyaların indirilmesini engeller
  * **Spesifik desenler**: Genel desenler yerine mümkün olduğunca spesifik desenler kullanın (örn: `fatura_*.pdf` yerine `fatura_2025_*.pdf`)
  * **Case sensitivity**: Gereksiz yere `caseInsensitive: false` kullanmaktan kaçının, özellikle Türkçe karakterlerle çalışırken
</Info>
