간단하고 사용하기 쉬운 Electron 애플리케이션용 파일 다운로드 관리자입니다. electron-dl
과 관련된 많은 문제에 대응하여 설계되었으며 Electron에서 파일을 다운로드하기 위한 보다 강력하고 안정적인 솔루션을 제공합니다.
사용 사례:
URL에서 파일 다운로드
다운로드와 관련된 ID를 얻어 추적하세요.
선택적으로 "다른 이름으로 저장" 대화 상자 표시
다운로드 진행 상황 업데이트 받기
다운로드를 취소/일시 중지/재개할 수 있습니다.
한 번에 여러 다운로드 지원
Electron 26.0.0 이상이 필요합니다.
// 기본 프로세스에서// 작동하는 예제는 아니며 'electron-dl-manager'의 APIimport { ElectronDownloadManager } 데모일 뿐입니다.const Manager = new ElectronDownloadManager();// 다운로드 시작const id = wait Manager.download( { 창: browserWindowInstance, URL: 'https://example.com/file.zip', saveDialogOptions: {title: '파일 저장', }, callbacks: {onDownloadStarted: async ({ id, item, webContents }) => { // 다운로드 ID로 작업 수행},onDownloadProgress: async (...) => {},onDownloadCompleted: async (...) = > {},onDownloadCancelled: async (...) => {},onDownloadInterrupted: async (...) => {},onError: (오류, 데이터) => {}, }});manager.cancelDownload(id);manager.pauseDownload(id);manager.resumeDownload(id);
전자 파일 다운로드 관리자
설치
시작하기
API
속성
isDownloadInProgress()
isDownloadPaused()
isDownloadResumable()
isDownloadCancelled()
isDownloadInterrupted()
isDownloadCompleted()
다운로드 진행 포맷 중
constructor()
download()
cancelDownload()
pauseDownload()
resumeDownload()
getActiveDownloadCount()
getDownloadData()
인터페이스: DownloadParams
인터페이스: DownloadManagerCallbacks
클래스: ElectronDownloadManager
클래스: DownloadData
모의수업
FAQ
감사의 말
$ npm 전자-dl-관리자를 설치합니다.
파일 다운로드를 처리할 Electron 애플리케이션의 기본 프로세스에서 electron-dl-manager
사용하는 것이 좋습니다.
이 예에서는 IPC 핸들러/인보커를 사용하여 기본 프로세스와 렌더러 프로세스 간 통신을 수행하지만 원하는 IPC 전략을 사용할 수 있습니다.
// MainIpcHandlers.tsimport { ElectronDownloadManager } from 'electron-dl-manager';import { ipcMain } from 'electron';const Manager = new ElectronDownloadManager();// 렌더러는 다운로드를 시작하기 위해 이 핸들러를 호출합니다ipcMain.handle('download -파일', 비동기(이벤트, 인수) => { const { URL } = 인수; 다운로드하자ID const browserWindow = BrowserWindow.fromId(event.sender.id) // *반드시* wait 또는 메소드를 사용하여 Manager.download()를 호출해야 합니다. // 예상치 못한 동작이 발생할 수 있습니다. downloadId = wait Manager.download({window: browserWindow,url,// 대화 상자로 저장하지 않고 다운로드하려는 경우saveAsFilename: 'file.zip',directory: '/directory/where/to/save',// 대화 상자로 저장하여 다운로드하고 싶습니다.saveDialogOptions: { title: 'Save File',},callbacks: { // 항목은 Electron.DownloadItem의 인스턴스입니다. onDownloadStarted: async ({ id, item, receivedFilename }) => {// 다운로드 ID를 다른 databrowserWindow.webContents.invoke('download-started', { id, // 파일이 될 파일 이름과 함께 // 렌더러로 다시 보냅니다. save as filename:solvedFilename, // 다운로드할 파일 크기를 바이트 단위로 가져옵니다. totalBytes: item.getTotalBytes(),}), onDownloadProgress: async ({ id, item, ratesCompleted }) => {// 다운로드 진행률을 다시 rendererbrowserWindow.webContents.invoke('download-progress', { id, ratesCompleted })로 보냅니다. // 지금까지 수신된 바이트 수를 가져옵니다. bytesReceived: item.getReceivedBytes(),}) }, onDownloadCompleted: async ({ id, item }) => {// 다운로드 보내기 rendererbrowserWindow.webContents.invoke('download-completed', { id, // 다운로드된 파일의 경로를 가져옵니다. filePath: item.getSavePath(),}); }, onError: (err, data) => {// ... 오류를 처리합니다 }} }); // 다운로드 일시중지 Manager.pauseDownload(downloadId);});
ElectronDownloadManager
Electron 애플리케이션에서 파일 다운로드를 관리합니다.
constructor()
생성자(매개변수: DownloadManagerConstructorParams)
인터페이스 DownloadManagerConstructorParams { /** * 정의된 경우 내부 디버그 메시지를 로그아웃합니다. * 다운로드 문제 해결에 유용합니다. * 빈도로 인해 진행 상황을 로그아웃하지 않습니다. */ debugLogger?: (메시지: 문자열) => void}
download()
파일 다운로드를 시작합니다. 다운로드 id
반환합니다.
download(params: DownloadParams): Promise<string>
DownloadParams
인터페이스 DownloadParams { /** * Electron.BrowserWindow 인스턴스 */ 창: 브라우저창 /** * 다운로드할 URL */ URL: 문자열 /** * 다운로드 이벤트를 수신하기 위해 정의하는 콜백 */ 콜백: DownloadManager콜백 /** * downloadURL 메소드에 전달할 Electron.DownloadURLOptions * * @see https://www.electronjs.org/docs/latest/api/session#sesdownloadurlurl-options */ downloadURLOptions?: Electron.DownloadURLOptions /** * 정의된 경우 사용자가 파일을 다운로드할 때 저장 대화 상자가 * 표시됩니다. * * @https://www.electronjs.org/docs/latest/api/dialog#dialogshowsavedialogbrowserwindow-options 참조 */ saveDialogOptions?: SaveDialogOptions /** * 파일을 저장할 파일 이름입니다. 정의되지 않은 경우 서버의 파일 이름 *이 사용됩니다. * * saveDialogOptions가 정의되지 않은 경우에만 적용됩니다. */ saveAsFilename?: 문자열 /** * 파일을 저장할 디렉터리입니다. 절대 경로여야 합니다. * @default 사용자의 다운로드 디렉터리 */ 디렉토리?: 문자열 /** * true인 경우 파일이 이미 있으면 덮어씁니다. * @default false */ 덮어쓰시겠습니까?: 부울}
DownloadManagerCallbacks
인터페이스 DownloadManagerCallbacks { /** * 다운로드가 시작되었을 때. "다른 이름으로 저장" 대화 상자를 사용할 때 * 사용자가 위치를 선택한 후에 호출됩니다. * * 이는 진행 및 완료된 이벤트 전에 항상 먼저 호출됩니다. */ onDownloadStarted: (데이터: DownloadData) => 무효 /** * 다운로드 진행 업데이트가 있는 경우. 참고: 다운로드가 즉시 완료되는 * 경우에는 이 *를 완전히 건너뛸 수 있습니다. 이 경우 onDownloadCompleted *가 대신 호출됩니다. */ onDownloadProgress: (데이터: DownloadData) => 무효 /** * 다운로드가 완료되면 */ onDownloadCompleted: (데이터: DownloadData) => 무효 /** * 다운로드가 취소된 경우. 사용자가 다른 이름으로 저장 대화 상자에서 *를 취소하는 경우에도 호출됩니다. */ onDownloadCancelled: (데이터: DownloadData) => 무효 /** * 다운로드가 중단된 경우. * 연결 불량, 서버 다운 등이 원인일 수 있습니다. */ onDownloadInterrupted: (데이터: DownloadData) => 무효 /** * 오류가 발생한 경우. * 참고: 서명은 (오류, <아마도 일부 데이터>)입니다. */ onError: (오류: 오류, 데이터?: DownloadData) => 무효}
cancelDownload()
다운로드를 취소합니다.
cancelDownload(id: 문자열): 무효
pauseDownload()
다운로드를 일시 중지합니다.
PauseDownload(id: 문자열): 무효
resumeDownload()
다운로드를 재개합니다.
이력서다운로드(id: 문자열): 무효
getActiveDownloadCount()
활성 다운로드 수를 반환합니다.
getActiveDownloadCount(): 숫자
getDownloadData()
다운로드에 대한 다운로드 데이터를 반환합니다.
getDownloadData(id: 문자열): 다운로드데이터
DownloadData
다운로드에 대한 콜백에서 반환된 데이터입니다.
클래스 다운로드데이터 { /** * 다운로드를 위해 생성된 ID */ 아이디: 문자열 /** * Electron.DownloadItem. 이를 사용하여 파일 이름, 경로 등을 가져옵니다. * @see https://www.electronjs.org/docs/latest/api/download-item */ 항목: 다운로드항목 /** * Electron.WebContents * @see https://www.electronjs.org/docs/latest/api/web-contents */ 웹컨텐츠: 웹컨텐츠 /** * Electron.Event * @see https://www.electronjs.org/docs/latest/api/event */ 이벤트: 이벤트 /** * 사용자의 컴퓨터에 저장되는 파일의 이름입니다. * 다른 이름으로 저장 대화 상자를 사용할 때 부정확할 수 있으므로 Item.getFilename()보다 권장됩니다. */ 해결된 파일 이름: 문자열 /** * true인 경우 다른 이름으로 저장 대화 상자에서 다운로드가 취소되었습니다. 이 플래그는 * 다른 이름으로 저장 대화 상자를 사용할 때 응용 프로그램에 의해 다운로드가 취소된 경우에도 적용됩니다. */ cancelledFromSaveAsDialog?: 부울 /** * 완료된 다운로드 비율 */ 완료율: 숫자 /** * 초당 바이트 단위의 다운로드 속도입니다. */ downloadRateBytesPerSecond: 숫자 /** * 남은 예상 시간(초)입니다. */ estimateTimeRemainingSeconds: 숫자 /** * 다운로드가 중단된 경우 중단된 상태 */ InterruptedVia?: '진행 중' | '완전한'}
라이브러리 bytes
및 dayjs
사용하여 다운로드 진행률 형식을 지정할 수 있습니다.
$ npm 설치 바이트 dayjs $ npm install @types/bytes --save-dev
'bytes'에서 바이트 가져오기 'dayjs'에서 dayjs 가져오기 'dayjs/plugin/relativeTime'에서 상대 시간 가져오기; 'dayjs/plugin/duration'에서 기간 가져오기;dayjs.extend(relativeTime);dayjs.extend(duration);const downloadData = Manager.getDownloadData(id); // 또는 콜백의 DataItem// 1.2MB/s와 같은 것을 반환합니다. formattedEstimatedTimeRemaining = dayjs.duration(downloadData.estimatedTimeRemainingSeconds, '초').humanize(true)
isDownloadInProgress()
다운로드가 진행 중이면 true를 반환합니다.
isDownloadInProgress(): 부울
isDownloadPaused()
다운로드가 일시 중지되면 true를 반환합니다.
isDownloadPaused(): 부울
isDownloadResumable()
다운로드를 재개할 수 있으면 true를 반환합니다.
isDownloadResumable(): 부울
isDownloadCancelled()
다운로드가 취소되면 true를 반환합니다.
isDownloadCancelled(): 부울
isDownloadInterrupted()
다운로드가 중단되면 true를 반환합니다.
isDownloadInterrupted(): 부울
isDownloadCompleted()
다운로드가 완료되면 true를 반환합니다.
isDownloadCompleted(): 부울
테스트에서 ElectronDownloadManager
모의해야 한다면 ElectronDownloadManagerMock
클래스를 사용할 수 있습니다.
import { ElectronDownloadManagerMock } from 'electron-dl-manager'
onError()
호출되지 않습니다. Electron DownloadItem
일반적으로 다운로드 오류를 캡처하는 명시적인 방법을 제공하지 않습니다.
https://www.electronjs.org/docs/latest/api/download-item#class-downloaditem
(이 라이브러리는 콜백 핸들러를 정의하는 데 사용하는 on('updated')
및 on('done')
이벤트만 포함합니다.)
유효하지 않은 URL에 대해 수행하는 작업은 onDownloadCancelled()
콜백을 트리거합니다.
const id = 관리자를 기다립니다.다운로드({ 창: 메인 창, URL: 'https://alkjsdflksjdflk.com/file.zip', callbacks: {onDownloadCancelled: async (...) => { // 잘못된 다운로드; 이 콜백은 호출됩니다}, }});
이를 처리하는 더 좋은 방법은 직접 다운로드하기 전에 URL이 존재하는지 확인하는 것입니다. 이 패키지에 포함할 수 있다고 생각되는 라이브러리를 찾을 수 없으므로 자신에게 적합한 라이브러리를 찾는 것이 가장 좋습니다.
https://www.npmjs.com/search?q=url%20exists&ranking=maintenance
GPT는 또한 다음 코드를 제안합니다(테스트되지 않음).
비동기 함수 urlExists(url: string): Promise<boolean> { {const response = wait fetch(url, { method: 'HEAD' });return response.ok;를 시도하십시오. } catch(오류) {return false; }}const 존재 = wait urlExists('https://example.com/file.jpg');
이 코드는 electron-dl
의 작은 부분을 사용하며 사용되는 코드에 명시되어 있습니다.
electron-dl
MIT 라이선스에 따라 라이선스가 부여되었으며 Sindre Sorhus [email protected](https://sindresorhus.com)에서 관리합니다.