INNORIX

INNORIX PLATFORM

INNORIX Platform시스템 전체의 파일 전송을 하나의 플랫폼에서 운영합니다.
  • 파일 전송 자동화
  • 서버 간 파일 전송
  • 객체 스토리지 간 전송
  • 파일 배포 및 수집

WEB

Exabyter웹에서 대용량 파일을 빠르고 안정적으로 업로드하고 다운로드합니다.
  • 웹 대용량 파일 업로드 & 다운로드
  • 개발자 가이드

DEVELOPERS

앱 임베디드 파일 전송기존 애플리케이션에 파일 전송 기능을 통합합니다.
  • 앱 임베디드 파일 전송

도구

전송 빌더원하는 전송을 직접 구성합니다.전송 파인더업무에 맞는 전송을 찾습니다.

성능과 규모

  • 고속 파일 전송
  • 대용량 파일 전송
  • 대량 파일 전송

현대화

  • FTP, SFTP 마이그레이션

새로운 전송 환경

  • AI Data Delivery
  • Dynamic Endpoint Transfer

글로벌 대규모 전송

Hyperlane수백 TB에서 PB까지 국가와 대륙을 넘어 전송합니다.
개발자리소스고객사
무료 시작하기
INNORIX

LET FILES
MOVE THEMSELVES

INNORIX는 모든 시스템과 환경에서 파일 이동과 자동화를 제공하는 엔터프라이즈 파일 인프라 기업입니다.
5,000개 이상의 기업 및 공공기관에서 사용하고 있습니다.

파일 전송

INNORIX PLATFORM

INNORIX Platform
  • 파일 전송 자동화
  • 서버 간 파일 전송
  • 객체 스토리지 간 전송
  • 파일 배포 및 수집

PERFORMANCE & SCALE

  • 고속 파일 전송
  • 대용량 파일 전송
  • 대량 파일 전송

MODERNIZATION

  • FTP, SFTP 마이그레이션

WEB

Exabyter
  • 웹 대용량 파일 업로드 & 다운로드
  • 개발자 가이드

DEVELOPERS

  • 앱 임베디드 파일 전송

NEW WORKLOADS

  • AI Data Delivery
  • Dynamic Endpoint Transfer

HYPERLANE

  • 서비스 소개
  • 서비스 문의

개발자

  • 개발자 센터
  • 구현 예제
  • API 빠른 시작
  • 개발자 가이드
  • API 레퍼런스
  • GitHub

도구

  • 전송 빌더
  • 전송 파인더

리소스

  • 리소스 센터
  • 제품 가이드
  • 외부 서비스 연동
  • 배포 및 관리
  • 도움말 센터

고객사

  • 정부
  • 공공부문
  • 제조
  • 엔지니어링
  • 금융
  • 유통
  • IT/통신
  • 미디어
  • 의료
  • 교육

플랜

  • 가격 및 플랜

회사

INNORIX 소개

비전 AI 제품

Al.bert — 스마트 교통 AI

글로벌 오피스

  • 미국 뉴욕
  • 대한민국 서울
  • 베트남 호찌민
  • 오피스 위치 보기→

(C)2026 INNORIX. All rights reserved.

  • 보안
  • 상태
  • 이용약관
  • 개인정보 처리방침
  • 쿠키 정책
  1. Exabyter
  2. Exabyter Standard 매뉴얼

Exabyter Standard 매뉴얼

INNORIX Exabyter Standard 업로드 및 다운로드 통합 가이드.

  • Lite
  • Standard

빠른 시작#

서버 설치도 개발도 없이, 콘솔에서 페이지를 만들고 화면(FE) 파일을 내려받아 내 사이트에 올리면 업로드와 다운로드가 동작합니다. 내 서버에 올리는 것은 화면 파일뿐이며, 서버 설정, 서버 라이브러리, API 연결 같은 서버(BE) 쪽 작업은 필요하지 않습니다. 파일 저장은 S3가 직접 처리합니다. 파일 전송에는 Agent가 쓰이므로 처음 사용하는 PC에서는 Agent 설치가 필요합니다.

① 콘솔에서 Create Web Based  →  ② 파일 다운로드  →  ③ 내 사이트에 올리기

Flow 하나는 업로드 또는 다운로드 중 한 가지 용도이며, 내려받는 HTML 파일 하나에 대응합니다. 업로드와 다운로드를 모두 쓰려면 Flow를 각각 만듭니다.

시작 전 준비#

  • INNORIX Platform에 파일을 저장할 S3 장비가 등록되어 있어야 합니다.
  • 화면 파일을 올릴 내 사이트 주소(예: https://www.mycompany.com)를 알고 있어야 합니다. 도메인을 입력하면 그 아래 모든 경로에서 사용할 수 있습니다.

Exabyter Standard — 이미지 01

업로드 페이지 만들기#

  1. 콘솔에서 Create Web Based를 누르고, Flow 이름을 입력합니다. 이 이름이 내려받는 HTML 파일 이름(Flow이름.html)이 됩니다. 사용할 S3 장비를 고르고 용도는 업로드를 선택합니다.

Exabyter Standard — 이미지 02

  1. 허용 사이트에 화면 파일을 올릴 내 사이트 주소를 입력하고 [만들기]를 누릅니다. 입력한 주소로 만든 라이선스가 innorix.js에 담깁니다. 나머지 항목은 기본값으로 충분합니다.
  2. 완료 화면의 [파일 다운로드]를 눌러 받은 파일(board-upload.html, innorix.js, innorix.css)을 허용 사이트로 입력한 주소의 웹 서버에 받은 폴더 구조 그대로 올립니다.

Exabyter Standard — 이미지 03

html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>파일 업로드</title>
  <link rel="stylesheet" href="./innorix.css">
  <script src="./innorix.js"></script>
</head>
<body>
  <div id="fileBox"></div>

  <script>
    var box = innorix.create({
      el: '#fileBox',
      flowName: 'board-upload'
    });

    box.on('uploadComplete', function (p) {
      console.log(p.transferID);   // 이 값을 내 시스템에 저장
    });
  </script>
</body>
</html>

파일은 콘솔이 만들어 주는 값을 그대로 사용합니다. 페이지 설정은 실행할 때 플랫폼에서 읽어 오므로 콘솔에서 설정을 바꿔도 파일을 다시 올리지 않아도 됩니다. 허용 사이트를 바꾼 경우에는 새 innorix.js를 받아 다시 올립니다.

  1. 올린 주소를 열어 파일을 추가하고 업로드를 누릅니다. Agent가 설치되어 있지 않으면 설치 안내가 나타나므로 안내에 따라 설치한 뒤 계속합니다. 전송창이 완료로 바뀌면 정상입니다. 화면이 나타나지 않거나 모양이 깨지면 HTML의 <script src>, <link href>가 innorix.js, innorix.css를 올린 경로와 같은지 확인합니다.

올리기 전에 완료 화면의 [미리보기]로 동작을 먼저 확인할 수 있습니다. 미리보기는 확인용입니다.

Exabyter Standard — 이미지 04

다운로드 페이지 만들기#

  1. Create Web Based에서 용도를 다운로드로 선택하고, 허용 사이트를 입력한 뒤 [만들기]를 누릅니다.
  2. [파일 다운로드]로 받은 파일(board-download.html, innorix.js, innorix.css)을 내 웹 서버에 올리고, transferId에 저장해 둔 번호를 지정하면 그때 올린 파일이 목록으로 나옵니다(transferId 저장 방법은 아래 [transferID 저장] 참고).
html
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>첨부 파일</title>
  <link rel="stylesheet" href="./innorix.css">
  <script src="./innorix.js"></script>
</head>
<body>
  <div id="fileBox"></div>

  <script>
    var box = innorix.create({
      el: '#fileBox',
      flowName: 'board-download',
      transferId: 'T-9f3a7c21e4b8'   // 내 시스템에 저장해 둔 값
    });
  </script>
</body>
</html>
  1. 목록에서 파일을 선택하고 다운로드를 누릅니다. 전송창이 완료로 바뀌고 파일이 저장되면 정상입니다.

Exabyter Standard — 이미지 05

Exabyter Standard — 이미지 06

transferID 저장#

업로드가 끝나면 페이지가 transferID(이번에 올린 파일 묶음의 번호)를 알려 줍니다. 이 번호를 내 시스템에 저장해 두면 나중에 같은 파일을 다운로드 페이지로 불러올 수 있습니다. 번호는 두 가지 방법으로 얻을 수 있습니다.

  • uploadComplete 이벤트: 업로드가 완료되면 이벤트의 p 객체에 transferID가 반환됩니다. 내 시스템에 저장하는 일반적인 방법입니다.
  • 콘솔 RUN 메뉴: RUN에서 해당 Flow의 히스토리를 열면 사용자가 업로드한 transferID를 확인할 수 있습니다.
javascript
box.on('uploadComplete', function (p) {
  console.log(p.transferID);   // 이 값을 내 시스템에 저장
});

업로드#

사용자가 고른 파일을 S3에 올리고, 올린 파일 묶음의 번호(transferID)를 내 시스템에 돌려주는 방법을 설명합니다. 모든 설정은 콘솔의 페이지 설정에서 하며, 코드를 작성하는 부분은 완료 이벤트를 받는 몇 줄뿐입니다. 각 기능은 설명 → 설정, 이벤트 → 예시 순서로 되어 있어 필요한 기능만 찾아 읽을 수 있습니다.

파일 선택#

파일 추가 버튼, 탐색기에서 끌어다 놓기, 폴더 선택이 모두 하나의 업로드 목록으로 모입니다. 이후 검증과 전송은 이 목록을 기준으로 진행됩니다. 선택 화면은 페이지가 제공하므로 별도 버튼을 만들지 않아도 됩니다.

파일 선택 대화상자 ─┐
폴더 선택 대화상자 ─┼→ 업로드 목록 → 검증 → 전송
드래그 앤 드롭 ─────┘

폴더 옵션#

설정 설명
folderAttach 폴더 첨부 허용
addFolder 폴더 구조를 저장소에 유지. 끄면 폴더 정보 없이 파일만 올라감
addEmptyFile 0바이트 파일 포함 여부

자동 업로드#

autoUpload를 켜면 파일을 추가하는 즉시 업로드가 시작됩니다. 끄면 사용자가 [업로드] 버튼을 눌러 시작합니다. 게시판처럼 글 저장과 함께 올리는 화면은 끄고, 첨부만 단독으로 받는 화면은 켭니다.

이전 전송 복원#

전송 중에 페이지를 닫으면 진행 중이던 전송은 취소되며, 다시 접속하면 끝나지 않은 전송을 목록에 되살려 이어서 올릴 수 있습니다. 원본 파일이 바뀌었으면 해당 파일은 복원되지 않고 file_is_modified 오류가 전달됩니다.

설정 설명
attachIncompleteFiles 페이지가 열릴 때 끝나지 않은 이전 전송 조회
autoLoadTransfer 켜면 묻지 않고 복원해 바로 업로드, 끄면 이어서 전송할지 사용자에게 확인

복원해서 끝낸 전송도 처음과 같은 transferID로 완료됩니다.

Exabyter Standard — 이미지 07

첨부 파일 설정#

회원 가입 서류 첨부에서 "최대 5개, pdf와 jpg만, 파일당 10MB"처럼 제한을 둬야 하는 경우입니다. 파일이 목록에 들어오는 시점에 검증하고, 위반한 파일만 거부합니다.

선택한 파일 → 중복 → 개수 → 전체 용량 → 차단 확장자 → 허용 확장자 → 개별 용량 → 목록 추가
                          (처음 실패한 항목에서 거부, addFileError)

개수, 전체 용량에 걸리면 같은 선택 묶음의 나머지 처리를 중단하고 앞서 통과한 파일은 목록에 남습니다. 확장자, 개별 용량 오류는 해당 파일만 건너뜁니다.

제한 설정#

콘솔의 [업로드 정책] → [첨부 제한]에서 지정합니다. 지정하지 않은 항목은 검사하지 않습니다.

설정 설명
maxFileCount 파일 개수 상한(바이트 아님, 개수)
maxFileSize, maxTotalSize 개별, 전체 용량 상한. 콘솔에서는 MB 단위로 입력
allowType 허용 확장자(점 없이 소문자, 쉼표로 구분)
denyType 차단 확장자. allowType과 겹치면 denyType 우선
useSignature 파일 앞부분으로 실제 형식 확인(확장자만 바꾼 파일 대응)
addDuplicateFile 중복 첨부 정책

확장자가 없는 파일은 allowType을 지정하면 거부됩니다. 중복 판정은 파일 경로 기준이라 이름이 같아도 폴더가 다르면 별개 파일입니다.

Exabyter Standard — 이미지 08

위반 처리 (addFileError)#

기본으로 페이지 안에 안내 문구가 표시됩니다. 별도 안내를 하려면 addFileError 이벤트를 받아 type별로 처리합니다. 이벤트 인자의 오류 객체에는 type, message, file이 있습니다.

type 의미
addDuplicateFile 중복 파일
maxFileCount, maxTotalSize, maxFileSize 개수, 용량 초과
denyType, allowType 확장자 위반
file_is_modified 이전 전송 복원 시 원본 파일이 바뀌어 복원되지 않음
javascript
box.on('addFileError', function (p) {
  var list = Array.isArray(p) ? p : [p];
  console.log(list[0].type, list[0].message);
});

서버 재검사#

화면의 제한은 우회될 수 있으므로 플랫폼이 업로드를 허용하기 전에 같은 제한을 서버에서 다시 검사합니다. 제한을 위반한 요청은 업로드되지 않고 오류로 전달됩니다.

Exabyter Standard — 이미지 09

업로드 실행#

수백 장의 사진을 올리는 중 회선이 느려져도, 일시 정지, 재개, 취소로 제어하고 끊긴 곳부터 이어서 올릴 수 있어야 합니다. 업로드는 페이지 안의 [업로드] 버튼으로 시작하고(autoUpload를 켠 경우 파일을 추가하는 즉시 시작) 전송창에서 제어합니다.

[업로드] → 전송 (진행률) → uploadComplete
               │
     일시 정지 / 재개 / 취소 / 오류 재시도

파일은 목록 순서대로 시작하지만 여러 파일이 겹쳐 전송되므로 완료 순서는 목록 순서와 같지 않을 수 있습니다. 큰 파일은 여러 조각으로 나뉘어 S3로 직접 전송되고, 끊겨도 받은 위치 이후부터 이어서 올립니다.

전송창 제어#

구분 이름
전송창 버튼 시작, 일시 정지, 재개, 취소
이벤트 uploadStart, uploadPause, uploadResume, uploadCancel, uploadComplete, uploadError
설정 cancelConfirmation(취소 전 확인 창), transferStart(전송창에서 시작 버튼을 누를지 여부)
  • 일시 정지 후 재개하면 끊긴 위치부터 이어 올립니다.
  • 취소하면 이미 올라간 파일은 그대로 두고, 다 올라가지 않은 조각은 플랫폼이 정리합니다.
  • 페이지를 닫으면 진행 중이던 전송은 취소됩니다. 다시 접속했을 때 끝나지 않은 전송을 감지해 이어서 올릴 수 있습니다([이전 전송 복원] 참고).

Exabyter Standard — 이미지 10

저장 규칙#

게시판 첨부 파일이 S3의 어디에 어떤 이름으로 저장되는지 정하는 부분입니다. 서버 코드를 만드는 대신 콘솔에서 서브 폴더 구성과 파일명 저장 방식을 고르며, 업로드 요청마다 플랫폼이 적용합니다. 저장된 위치와 이름은 업로드 완료 이벤트로 모두 돌려주므로 내 시스템이 따로 계산하지 않아도 됩니다.

저장 위치#

업로드한 파일은 S3 스토리지의 transferID 이름의 폴더 아래에 저장됩니다. 업로드 한 번(파일 묶음 하나)이 폴더 하나입니다. 서브 폴더 구성을 지정하면 transferID 폴더 아래에 그 구성으로 폴더가 한 단계 더 만들어집니다.

<버킷>/
└── T-9f3a7c21e4b8/            ← transferID 폴더 (항상)
    └── 2026/10/08/            ← 서브 폴더 구성(subFolderRule)을 지정한 경우
        ├── 3f2c9a7e41d0.pdf   ← fileNameType: encode (원본 이름: 계약서.pdf)
        └── 첨부/              ← 폴더로 올렸다면 구조 유지(addFolder)
            └── a81d05c2f7b3.jpg   (원본 이름: 사진.jpg)

설정 항목#

설정 설명 기본값
subFolderRule transferID 폴더 아래의 서브 폴더 구성. {yyyy}, {MM}, {dd}(업로드 날짜)를 /로 조합. 비워 두면 transferID 폴더 바로 아래에 저장 비움
fileNameType 저장 파일명 방식. original(원본 이름 그대로), encode(인코딩: 임의 이름 {uuid}.{ext}로 저장) original
overwrite 같은 이름의 파일이 있을 때 덮어쓸지 여부 끔
  • encode로 저장해도 원본 이름은 플랫폼이 transferID 목록에 함께 기록하므로, 다운로드 때는 원본 이름으로 표시되고 저장됩니다.
  • 같은 폴더에 같은 이름의 파일이 있으면(예: addFolder를 끄고 서로 다른 폴더에서 같은 이름의 파일을 고른 경우) 기본으로 이름 뒤에 번호를 붙여 따로 저장합니다(이름(1).확장자). overwrite를 켜면 번호를 붙이지 않고 기존 파일을 덮어씁니다. encode는 이름이 겹치지 않으므로 해당하지 않습니다.
  • 파일명에 쓸 수 없는 문자(\ / : * ? " < > |)는 original에서 플랫폼이 _로 바꿉니다.
  • 저장 위치와 저장 이름은 uploadComplete의 files 항목(serverFilePath, serverFileName, clientFileName)으로 transferID와 함께 전달됩니다. 자세한 내용은 [완료 처리]를 참고합니다.

Exabyter Standard — 이미지 11

완료 처리#

모든 파일의 업로드가 끝나면 페이지에서 uploadComplete 이벤트가 발생합니다. 이 이벤트의 **transferID**가 이번에 올린 파일 묶음을 가리키는 번호입니다. 이 번호를 내 시스템에 저장해 두었다가 다운로드 페이지에서 사용합니다.

업로드 완료 → uploadComplete(transferID) → 내 시스템이 transferID 저장 → 이후 다운로드 페이지에서 사용

uploadComplete 이벤트#

필드 설명
transferID 파일 묶음 번호. 추측할 수 없는 긴 값
postData 업로드 때 보낸 데이터(postData 옵션)
files 올라간 파일 목록. 각 파일의 원본 이름, 저장된 이름, 저장 위치를 모두 포함 (아래 표)

files의 각 항목은 다음 필드를 가집니다.

필드 설명
clientFileName 원본 파일명
serverFileName 저장된 파일명. original이면 원본과 같고, encode이면 변경된 이름
serverFilePath 저장소 안의 전체 경로(transferID/서브 폴더/파일명)
rootName 폴더로 올린 경우 상위 폴더 경로
fileSize, fileState 크기(bytes), 파일별 전송 상태
json
{
  "transferID": "T-9f3a7c21e4b8",
  "postData": { "boardId": "1024" },
  "files": [{
    "clientFileName": "계약서.pdf",
    "serverFileName": "3f2c9a7e41d0.pdf",
    "serverFilePath": "T-9f3a7c21e4b8/2026/10/08/3f2c9a7e41d0.pdf",
    "fileSize": 4952305,
    "fileState": "Complete"
  }]
}

게시글 연동#

게시글 저장 요청에 transferID를 함께 보내 게시글과 연결해 둡니다. 서버는 받은 값을 게시글 정보와 같이 저장하면 됩니다.

html
<form method="post" action="/board/write">
  <input type="hidden" id="transferId" name="transferId">
  <div id="fileBox"></div>
  <input type="submit" value="저장">
</form>

<script>
  var box = innorix.create({
    el: '#fileBox',
    flowName: 'board-upload',
    postData: { boardId: '1024' }
  });

  box.on('uploadComplete', function (p) {
    document.getElementById('transferId').value = p.transferID;   // 글 저장 때 함께 전송
  });
</script>
  • 글 저장이 재시도되어도 중복 저장되지 않도록 글 번호와 transferID를 한 쌍으로 저장합니다.
  • 업로드를 마치지 않고 창을 닫으면 uploadComplete가 발생하지 않으므로, 글 저장 전에 transferID가 채워졌는지 확인합니다.

데이터 전달#

게시글 번호와 분류 같은 업무 값을 파일과 함께 기록해 두는 경우입니다. postData 옵션으로 넘긴 값이 업로드 묶음에 함께 기록되고, uploadComplete의 postData로 돌아옵니다.

내 사이트 → postData 옵션 → 업로드 → 업로드 묶음에 기록 → uploadComplete의 postData
javascript
box = innorix.create({
  el: '#fileBox',
  flowName: 'board-upload',
  postData: { boardId: '1024', category: 'notice' }
});
  • 키는 영문, 숫자, _만 쓸 수 있고, 값은 최대 100자입니다.
  • 이 값은 사용자가 브라우저에서 바꿀 수 있으므로 사용자 ID 같은 인증 값은 쓰지 않습니다. 사용자 확인은 내 시스템이 합니다.

오류 및 재처리#

엘리베이터를 타거나 와이파이가 바뀌어 연결이 잠깐 끊기는 환경에서도 사용자가 처음부터 다시 올리지 않도록, 일시적인 오류는 자동 재시도하고 받은 위치부터 이어 올립니다.

오류 발생 (uploadError)
   ├ 복구 불가 → 일시 정지 (uploadPause) → 사용자가 재개
   └ 복구 가능 → 자동 재시도 → 이어올리기

재시도 설정#

설정 설명
retryCount 재시도 횟수. 기본값을 권장
autoRecovery 켜면 오류 시 자동으로 이어서 전송, 끄면 오류마다 재개 버튼 필요
maxErrorCount 허용 오류 횟수
skipErrorFile 오류 파일을 건너뜀. 정책 위반 파일은 재시도해도 같은 결과이므로 건너뛰거나 일시 정지로 알림

오류 이벤트#

uploadError 이벤트의 statusMessage.errorCode로 오류를 구분합니다.

코드 구분
0 화면(클라이언트) 오류
400~599 네트워크 오류
5000 라이선스 오류. 페이지가 실행되는 사이트 주소가 innorix.js에 담긴 허용 사이트와 일치하지 않음
10001 이상 파일 접근, 저장소 쓰기 오류
javascript
box.on('uploadError', function (p) {
  console.log(p.statusMessage);
});

Exabyter Standard — 이미지 12

다운로드#

업로드할 때 받은 transferID로, 그때 올린 파일을 사용자에게 내려받게 하는 방법을 다룹니다. 파일 목록을 만드는 서버 API나 다운로드 서버를 직접 만들 필요가 없습니다. 각 기능은 설명 → 설정, 이벤트 → 예시 순서로 되어 있어 필요한 기능만 찾아 읽을 수 있습니다.

다운로드 목록#

문서관리 화면에서 사용자가 계약서에 첨부된 파일을 한 번에 받는 경우입니다. create()의 transferId 옵션에 번호를 지정하면 그 번호로 올린 파일이 목록이 됩니다. 목록은 플랫폼이 transferID에서 찾아 구성하므로 내 쪽에서 파일 이름이나 크기를 알려 줄 필요가 없습니다.

저장해 둔 transferID → create()의 transferId 옵션 → 파일 목록 → 다운로드
지정 목록
transferId: 'T-9f3a7c21e4b8' 그 번호로 올린 파일
transferId: ['T-9f3a7c21e4b8', 'T-71bc02ad55e0'] 두 번호의 파일을 한 목록으로
  • 목록에 표시되는 파일명은 업로드 때의 원본 이름(clientFileName)입니다.
  • 폴더로 올린 파일은 폴더 구조가 목록에 표시되고 모두 선택해 받을 수 있습니다.
  • 번호가 없거나 잘못되면 "파일을 찾을 수 없습니다"가 표시되고 downloadError가 발생합니다.
javascript
box = innorix.create({
  el: '#fileBox',
  flowName: 'board-download',
  transferId: 'T-9f3a7c21e4b8'   // 내 시스템에서 읽어 온 값
});

접근 제한#

transferID를 아는 사람은 누구나 파일을 받을 수 있습니다. 누가 이 번호를 볼 수 있는지는 내 시스템이 정합니다. 로그인과 권한을 확인한 사용자에게만 번호를 내려 주고, 권한이 없는 사람에게는 번호가 나가지 않게 합니다.

javascript
// 서버 응답에서 권한이 확인된 경우에만 transferId를 내려 줌 (내 시스템의 로직)
fetch('/board/1024/attachments/token')
  .then(function (r) { return r.ok ? r.json() : Promise.reject(r.status); })
  .then(function (d) {
    box = innorix.create({
      el: '#fileBox',
      flowName: 'board-download',
      transferId: d.transferId
    });
  });

Exabyter Standard — 이미지 13

다운로드 실행#

사진 관리 화면에서 사용자가 몇 장만 골라 받거나 "전체 받기"를 누르는 경우입니다. 페이지 안에 두 버튼이 있습니다.

버튼 설명 언제 쓰나
다운로드 선택한 항목만 받음 체크박스로 고르는 화면
전체 받기 목록 전체를 받음 한 번에 모두 받는 화면

autoDownload를 켜면 페이지가 열리자마자 목록 전체를 받기 시작합니다. 이메일의 "첨부 파일 받기" 링크처럼 열면 바로 받아야 하는 화면에 씁니다.

  • 파일은 플랫폼을 거치지 않고 S3에서 바로 내려옵니다. 저장 위치는 Agent의 기본 경로를 따릅니다.
  • 받기가 시작되면 downloadStart, 모든 파일의 저장이 끝나면 downloadComplete 이벤트가 발생합니다. 완료 이벤트에서 다운로드 이력을 내 시스템에 남길 수 있습니다.
  • 다운로드 페이지를 사용할 수 있는 기간은 콘솔에서 페이지를 만들 때 만료 날짜와 시간으로 지정합니다(downloadExpiration). 만료 일시가 지나면 목록 조회와 받기가 모두 되지 않으며, 기간이 자동으로 연장되지는 않습니다.

Exabyter Standard — 이미지 14

오류 및 재처리#

네트워크가 끊겨 다운로드가 실패하거나, 번호에 해당하는 파일이 없는 경우입니다. 페이지가 상태를 화면에 안내하고, downloadError 이벤트로 내 사이트에도 알립니다.

오류 확인할 것
파일을 찾을 수 없음(404) transferID가 맞는지(콘솔 RUN 메뉴의 해당 Flow 히스토리에서 확인), 업로드가 정상 완료되었는지, 파일이 삭제되지 않았는지
라이선스 오류(5000) 페이지를 올린 사이트 주소가 콘솔에 입력한 허용 사이트와 같은지, 받은 innorix.js를 그대로 올렸는지
다운로드 페이지 유효 기간 만료 콘솔의 페이지 설정에서 만료 날짜, 시간 확인. 필요하면 늘려서 다시 지정
화면이 나타나지 않거나 모양이 깨짐 HTML의 <script src>, <link href>가 innorix.js, innorix.css를 올린 경로와 같은지, 파일이 정상 응답하는지 확인
Agent 연결 안 됨 Agent가 설치, 실행 중인지 확인. 설치 안내가 나타나면 안내에 따라 설치
네트워크 오류(400~599) 프록시, 사내 방화벽에서 플랫폼, S3 주소가 차단되지 않았는지
javascript
box.on('downloadError', function (p) {
  console.log(p.statusMessage.errorCode);
});
  • 받은 파일이 열리지 않거나 downloadComplete가 발생하지 않았다면 받기가 끝나지 않은 것이므로 다시 받습니다.
  • 계속 실패하면 콘솔 RUN 메뉴의 해당 Flow 히스토리에서 transferID와 업로드된 파일을 확인합니다.

고급 활용#

기본 업로드, 다운로드 이후에 필요한 화면 구성, 연계, 보안을 다룹니다. 각 절은 하나의 상황에서 시작해 설정과 코드를 한 흐름으로 설명합니다.

화면 구성#

사내 결재 화면에 올린 페이지의 파일 목록 모양과 진행 상태 표시를 업무 화면에 맞추고 싶은 경우입니다. 페이지 화면은 두 영역입니다. 파일을 보여주는 **리스트(파일 목록)**와 전송 중에 나타나는 전송창입니다. 리스트 모양은 boxStyle, 전송창 모양은 transferWindowStyle로 고르며 콘솔의 [화면 구성]에서 지정합니다.

페이지 설정(boxStyle, transferWindowStyle, 크기, 언어) → 화면 파일 → 내 사이트

리스트 스타일#

boxStyle 모양
list 리스트형
icon 아이콘형

Exabyter Standard — 이미지 15

전송창 스타일#

transferWindowStyle 모양
default 기본 크기 전송창
mini 레이어로 출력하는 전송창의 작은 버전
list 레이어로 출력하며 진행도 위에 파일 목록을 함께 표시
compact 레이어 없이 리스트 하단에 표시

showTransferWindow를 끄면 전송창이 열리지 않아 사용자가 일시 정지, 취소를 할 수 없으므로 일반적으로 켜 둡니다. 화면 위에 레이어를 띄우고 싶지 않으면 compact를 선택합니다.

Exabyter Standard — 이미지 16

크기, 제목, 언어#

설정 설명
boxWidth, boxHeight 컨트롤 너비, 높이
transferWindowTitle 전송창 제목 줄에 표시할 문구
controlLang UI 문구 언어(ko, en). create()에 직접 지정할 수도 있음
hideLogo 컨트롤의 로고 숨김

업무 데이터와 연계#

게시글, 주문, 계약 같은 업무 데이터에 첨부 파일을 연결하는 가장 일반적인 구성입니다. 내 시스템에는 파일 자체가 아니라 transferID 하나만 저장하면 됩니다.

[글쓰기]  업로드 페이지 → uploadComplete → transferID를 글 정보와 함께 저장
[글보기]  저장된 transferID → 다운로드 페이지 → 첨부 목록 표시
단계 내 시스템이 하는 일
업로드 이벤트로 받은 transferID를 글 저장 요청에 함께 보냄
저장 글 번호와 transferID를 함께 저장 (테이블에 transfer_id 컬럼 하나)
조회 권한을 확인한 뒤 transferID를 다운로드 페이지의 transferId 옵션으로 지정
수정 파일을 더 올리면 새 transferID가 생기므로 저장 값을 갱신하거나 여러 번호를 함께 보관
  • 파일을 추가로 올린 글은 transferId: ['A', 'B']처럼 번호를 배열로 지정해 한 목록으로 보여 줍니다.
  • 글을 삭제할 때 파일까지 지울지는 내 시스템이 정합니다. 번호만 지우면 파일은 저장소에 남습니다.

보안#

로그인한 사용자만 계약서 첨부를 내려받게 해야 하는 경우입니다. 페이지는 사용자 권한을 알지 못하므로 누구에게 transferID를 보여 줄지는 내 시스템이 판단합니다. allowType, maxFileSize 같은 화면 제한은 안내용이며, 플랫폼이 서버에서 같은 규칙으로 다시 검사합니다.

보안은 다음 항목으로 구성합니다.

사용자 → [HTTPS] → 라이선스(허용 사이트) 확인 → 파일 검사(확장자, 크기, 시그니처) → 저장소(S3)
              내 시스템: 권한 확인 후에만 transferID를 내려 줌
방식 설명 언제 쓰나
허용 사이트 화면 파일을 올릴 사이트 주소를 콘솔에 입력하면 그 주소로 만든 라이선스가 innorix.js에 담김. 실행되는 사이트 주소와 일치하지 않으면 페이지가 동작하지 않음 모든 페이지(필수)
HTTPS 내 사이트와 플랫폼 주소 모두 https 운영 환경 전체
확장자, 시그니처 검증 allowType, denyType, useSignature + 플랫폼 재검사 위장 파일 차단
transferID 관리 권한 확인 후에만 내려 주고, 로그, URL 공유에 남기지 않기 비공개 파일
  • 허용 사이트: 여러 개를 입력할 수 있습니다. 도메인 단위로 입력하므로 하위 경로는 따로 입력하지 않습니다. 예를 들어 exabyter.com을 입력하면 exabyter.com/test에서도 사용할 수 있습니다. 반면 dev.exabyter.com처럼 서브 도메인은 다른 주소이므로 따로 입력해야 합니다. innorix.js에 담긴 라이선스의 주소와 페이지가 실행되는 사이트 주소가 일치하는지 확인하며, 일치하지 않으면 페이지가 동작하지 않고 5000 오류가 발생합니다. 사이트 주소가 바뀌면 콘솔에서 수정한 뒤 새 innorix.js를 받아 다시 올립니다.
  • Flow 이름: 화면 파일에는 Flow 이름만 들어 있고 비밀 값은 없습니다. 라이선스가 담긴 innorix.js는 입력한 허용 사이트에서만 동작합니다.
  • transferID: 추측할 수 없는 값이지만, 아는 사람은 누구나 파일을 받을 수 있습니다. 비공개 파일은 사용자마다 권한을 확인한 뒤에만 번호를 내려 주고, 번호가 담긴 화면이나 주소를 외부에 공유하지 않도록 안내합니다.

Exabyter Standard — 이미지 17

Exabyter Standard — 이미지 18

API Reference#

콘솔의 페이지 설정, create() 옵션, 페이지가 발생시키는 이벤트를 한곳에 모았습니다. 기능을 구현하다가 이름, 값, 형식을 빠르게 확인해야 할 때 사용합니다. 설정 이름과 이벤트 이름은 대소문자를 구분합니다.

페이지 설정 항목#

콘솔의 Create Web Based 화면의 설정에서 지정하는 항목입니다. 페이지 설정은 실행할 때 플랫폼에서 읽어 오므로, 설정을 바꿔도 이미 올려 둔 파일은 그대로 두어도 즉시 반영됩니다. 다만 허용 사이트를 바꾸면 새 innorix.js를 받아 다시 올립니다.

기본#

설정 타입 설명
Flow 이름 String 콘솔에서 구분하는 이름. 내려받는 HTML 파일 이름과 미리보기 주소에 사용. 전송창 제목과는 별개
장비 선택 파일을 저장할 S3 장비
transferMode String Flow의 용도. "upload"(업로드), "download"(다운로드)
허용 사이트 Array 화면 파일을 올릴 사이트 주소. 필수. 입력한 주소로 만든 라이선스가 innorix.js에 담김. 하위 경로는 포함되고 서브 도메인은 따로 입력

화면 구성#

설정 타입 설명
boxStyle String 리스트 모양. list(리스트형), icon(아이콘형)
transferWindowStyle String 전송창 모양. default, mini, list, compact
showTransferWindow Boolean 전송창 표시
transferWindowTitle String 전송창 제목
boxWidth, boxHeight Number / String 컨트롤 너비, 높이
controlLang String UI 문구 언어(ko, en)
hideLogo Boolean 컨트롤의 로고 숨김
showSelectBox Boolean 행의 선택 체크박스 표시
showFileListHeader Boolean 목록 헤더 표시
showByteSize Boolean 크기를 바이트 단위 숫자로 표시
showNotificationLayer Boolean 컨트롤 내부 알림 레이어 사용
useContextMenu Boolean 우클릭 컨텍스트 메뉴 사용

파일 선택과 검증#

설정 타입 설명
allowType Array 허용 확장자 목록(소문자, 점 없음)
denyType Array 차단 확장자 목록
maxFileCount Number 업로드 목록의 최대 파일 수
maxFileSize Number 파일 하나의 최대 크기(콘솔에서는 MB 단위로 입력)
maxTotalSize Number 업로드 목록 총 크기 한도(콘솔에서는 MB 단위로 입력)
useSignature Boolean 파일 시그니처로 확장자 위조를 검사
addDuplicateFile Boolean false이면 같은 경로의 중복 추가를 거부
addEmptyFile Boolean 0바이트 파일 추가 허용
addFolder Boolean 폴더 항목 추가
folderAttach Boolean 폴더 첨부 허용
showFolderItems Boolean 폴더 하위 항목을 펼쳐서 표시
openFolderItems Boolean 폴더 클릭으로 하위 항목 펼침/접힘

저장 규칙#

설정 타입 설명
subFolderRule String transferID 폴더 아래의 서브 폴더 구성. {yyyy}, {MM}, {dd}를 /로 조합. 기본 비움
fileNameType String 저장 파일명 방식. original(원본 그대로), encode(임의 이름으로 저장). 기본 original
overwrite Boolean 같은 이름의 파일을 덮어씀. 기본 false(번호를 붙여 따로 저장)

저장 위치는 항상 transferID 폴더 아래입니다. 자세한 내용은 업로드 장의 [저장 규칙]을 참고합니다.

전송 동작#

설정 타입 설명
autoUpload Boolean 파일을 추가하면 바로 업로드
autoDownload Boolean 페이지를 열면 목록 전체를 바로 다운로드
transferStart Object 전송창에서 시작 버튼을 누를지 여부. { upload, download }. "auto" 또는 수동
cancelConfirmation Boolean 취소 시 확인창 표시
retryCount Number 재시도 허용 횟수
maxErrorCount Number 누적 오류가 이 값을 넘으면 일시정지
autoRecovery Boolean 오류 시 자동 재시도
skipErrorFile Boolean 오류 파일을 건너뜀
attachIncompleteFiles Boolean 페이지가 열릴 때 끝나지 않은 이전 전송을 조회해 복원
autoLoadTransfer Boolean 이전 전송을 확인 없이 목록에 추가하고 자동으로 이어서 업로드
downloadExpiration String 다운로드 페이지의 만료 일시. YYYY-MM-DD HH:mm 형식(예: 2026-12-31 23:59). 페이지를 만들 때 콘솔에서 지정

생성 옵션#

내려받은 HTML에서 innorix.create()에 전달하는 옵션입니다. 업로드 제한이나 저장 규칙 같은 페이지 설정은 콘솔에서 지정하므로 여기에 쓰지 않습니다.

javascript
var box = innorix.create({
  el: '#fileBox',
  flowName: 'board-download',
  transferId: 'T-9f3a7c21e4b8'
});
옵션 타입 대상 설명
el String 공통 페이지를 그릴 요소의 선택자. 필수
flowName String 공통 콘솔에서 만든 Flow 이름. 내려받은 HTML 파일 이름과 같음. 필수
transferId String / Array 다운로드 다운로드할 파일 묶음의 번호. 배열로 여러 개 지정
postData Object 업로드 업로드 묶음에 기록할 값. 키는 영문, 숫자, _, 값은 최대 100자. uploadComplete의 postData로 돌아옴
controlLang String 공통 UI 언어(ko, en). 콘솔 설정보다 우선

미리보기 주소#

콘솔의 [미리보기]는 https://app.innorix.com/{userID}/exabyter/{flowName}으로 열립니다. 내 사이트에 올리기 전에 업로드와 다운로드가 동작하는지 확인하는 용도이며 운영에는 사용하지 않습니다.

이벤트#

box.on(name, handler)로 등록하고 box.off(name)으로 해당 이벤트의 핸들러를 모두 제거합니다. box.on({ 이름: 핸들러, ... })로 여러 개를 한 번에 등록할 수 있습니다.

javascript
box.on('loadComplete', function () {
  console.log('컨트롤 준비 완료');
});

box.on('uploadComplete', function (p) {
  console.log(p.transferID, p.files);
});

이벤트 목록#

이벤트 발생 시점 p
loadComplete 페이지가 준비되어 사용할 수 있게 된 직후 없음
addFileError 개수, 크기, 확장자 검사 등에 걸렸을 때 오류 객체 또는 배열
uploadStart 업로드 전송이 시작될 때 전송 상태 객체
uploadComplete 모든 파일의 업로드가 끝난 뒤 전송 상태 객체
uploadCancel 전송이 취소됐을 때 전송 상태 객체
uploadError 전송 중 오류가 발생했을 때 전송 상태 객체
uploadPause, uploadResume 일시 중지, 재개 전송 상태 객체
downloadStart 파일 받기가 시작될 때 전송 상태 객체
downloadComplete 모든 파일의 받기가 끝난 뒤 전송 상태 객체
downloadError 목록 조회나 받기 중 오류가 발생했을 때 전송 상태 객체

addFileError의 오류 객체는 { type, message, file }이며 type은 addDuplicateFile, maxFileCount, maxTotalSize, maxFileSize, denyType, allowType, file_is_modified입니다. 항상 배열로 바꿔 처리합니다.

전송 상태 객체#

모든 전송 이벤트가 같은 형태의 객체를 전달합니다.

필드 타입 설명
transferID String 파일 묶음 번호. 다운로드 페이지의 transferId로 사용
type String "upload" 또는 "download"
state String Before, Ready, Transferring, Complete, Cancel, Error, Pause
progress Number 진행률(0~100)
speed Number 전송 속도(bytes/s)
totalSize Number 전체 크기(bytes)
transferSize Number 전송한 크기(bytes)
totalFileCount Number 전체 파일 수
transferCompletedFileCount Number 전송 완료된 파일 수
retries Number 재시도 횟수
stopRetrying Boolean 재시도를 중단했는지 여부
postData Object 업로드 때 보낸 postData 값
files Array 전송 대상 파일 객체 배열
statusMessage Object { id, errorCode }. 상태 식별자, 오류 코드(없으면 false)

uploadComplete의 files 항목은 다음 필드를 가집니다.

필드 타입 설명
clientFileName String 원본 파일명(화면에 표시하는 이름)
serverFileName String 저장소에 저장된 파일명(fileNameType이 encode이면 변경된 이름)
serverFilePath String 저장소 안의 전체 경로(transferID/서브 폴더/파일명)
rootName String 폴더로 올린 경우 상위 폴더 경로
fileSize Number 크기(bytes)
fileState String 파일별 전송 상태

오류 코드#

statusMessage.errorCode는 다음처럼 나뉩니다.

코드 구분
0 화면(클라이언트) 오류
404 번호(transferId)에 해당하는 파일이 없음
400~599 네트워크 오류 (404 제외)
5000 라이선스 오류
10001 이상 파일 접근, 저장소 쓰기 오류
이전Lite

이 페이지에서

  • 빠른 시작
  • 시작 전 준비
  • 업로드 페이지 만들기
  • 다운로드 페이지 만들기
  • 업로드
  • 파일 선택
  • 첨부 파일 설정
  • 업로드 실행
  • 저장 규칙
  • 완료 처리
  • 데이터 전달
  • 오류 및 재처리
  • 다운로드
  • 다운로드 목록
  • 다운로드 실행
  • 오류 및 재처리
  • 고급 활용
  • 화면 구성
  • 업무 데이터와 연계
  • 보안
  • API Reference
  • 페이지 설정 항목
  • 생성 옵션
  • 이벤트