programing tip

Chrome 확장 프로그램은 어떻게 많은 파일을 사용자 지정 디렉토리에 저장할 수 있습니까?

itbloger 2020. 11. 9. 07:53
반응형

Chrome 확장 프로그램은 어떻게 많은 파일을 사용자 지정 디렉토리에 저장할 수 있습니까?


내부 도구로 사용할 Chrome 확장 프로그램을 개발 중입니다. 필요한 동작은 다음과 같습니다.

  1. 페이지 작업으로 특정 인트라넷 페이지를 볼 때 주소 표시 줄 아이콘을 활성화합니다.
  2. 사용자가 아이콘을 클릭하면 페이지에서 특정 미디어 유형 (예 : .jpg)의 모든 파일을 식별하고
  3. 사용자의 로컬 드라이브에있는 디렉토리에 모두 자동으로 저장합니다.

이 질문은 이전에 요청 되었지만 그 당시 대답은 " NPAPI 사용 "이었고 NPAPI는 이제 폐기되었습니다 .

그렇다면 현재 사용 가능한 방법은 무엇입니까? 내가 본 것들은 다음과 같습니다.

  • chrome.FileSystem의 API는 ---하지만이 모든 사용자가 액세스 할 수있는 위치에 파일을 저장하지 않습니다. 대신 저장된 파일은 문서화되지 않은 디렉토리에서 난독 화 된 이름 뒤에 숨겨집니다 . 사용자는 파일이 액세스 가능한 디렉토리에 원래 이름으로 저장되어야합니다.
  • HTML5 다운로드 속성 : 데이터 : URL을 만들고 프로그래밍 방식으로 클릭합니다. 이렇게하면 각 파일에 대해 "다른 이름으로 저장 ..."대화 상자가 나타납니다. 이는 단일 페이지에 100 개의 자산이있을 때 허용되지 않습니다. 사용자는 단일 아이콘 클릭 이외에 추가 상호 작용없이 파일을 다운로드해야합니다.
  • 크롬 다운로드 API는 하지만 베타와 dev에 채널에서만 사용할 수 있습니다. 사용자는 주류 Chrome에서이 확장 프로그램을 사용해야합니다.
  • 단순히 파일을 디스크에 저장하는 작은 .exe를 만들어 네이티브 메시징 API사용하고 .jpg를 blob으로 전달합니다. 이것은 매우 성가신 것처럼 보이며 큰 blob을 이와 같은 EXE에 안정적으로 전달하는 방법도 모르겠습니다.

시도 할 수있는 다른 방법이 있습니까?


당신은 꽤 많은 연구를했습니다. 실제로 일반 웹 페이지는 플러그인이나 확장 프로그램 없이는 사용자의 파일 시스템에 쓸 수 없습니다. 또한 HTML5 파일 시스템 API 는 여러분이 관찰 한 것처럼 가상 파일 시스템에 대한 액세스 만 제공합니다.

그러나 chrome.fileSystemAPI와 HTML5 FileSystem API를 혼동하고 있습니다. HTML FileSystem API와 달리 Chrome의 fileSystem(앱) API는 사용자가 지정한 사용자의 파일 시스템 (예 : 또는 )에 직접 쓸있습니다 .~/Documents%USERPROFILE%\Documents

이 API는 확장 프로그램 이 아닌 Chrome 에서만 사용할 수 있습니다 . 이는 문제가되지 않습니다. 특히 앱과 확장 프로그램을 설치하고 메시지 전달사용 하여 확장 프로그램 (페이지 작업)과 앱 (파일 시스템 액세스)간에 통신 할 수 있기 때문에 내부 도구를 개발하고 있기 때문에 문제가되지 않습니다 ( example ).


정보 chrome.downloads: 확장 프로그램이 내부 용이므로이 API를 사용하기 위해 사용자가 베타 / 개발 채널을 사용하도록 강제 할 수 있습니다. 이 API의 유일한 제한은 파일이 사용자 정의 다운로드 폴더 (의 하위 디렉토리)에 저장된다는 것입니다.

수정 : chrome.downloads이제 안정적인 브랜치를 포함한 모든 채널에서 API를 사용할 수 있습니다 (Chrome 31 이후).


나는 당신이 당신의 숙제를 끝낸 것이 두렵습니다. 즉 당신은 가능한 모든 대안을 살펴 보았습니다.

원하는 것을 정확하게 달성하는 가장 좋은 방법은 지원하는 기본 앱을 사용하고 기본 메시징을 통해 통신하는 것입니다. BTW, 대역폭은 인트라넷에서 거의 문제가되지 않으므로 리소스 (예 : 이미지) URL을 전달하고 앱에서 다운로드하여 저장하는 것이 더 간단 할 수 있습니다.
(예, 단순히 확장 기능을 개발하는 것보다 더 번거롭지 만해야 할 일을해야합니다. 그렇죠?)

반면에 개발의 단순성보다 약간의 사용자 경험을 희생하려는 경우 HTML5 기능 (로컬에서 파일을 만들고 다운로드 할 수 있음)을 JS 압축 라이브러리 (예 : JSZip ) 와 결합하는 것이 좋습니다 . 따라서 사용자는 단일 zip 파일 만 다운로드하면됩니다 (한 번만 메시지가 표시됨). BTW, 사용자가 원하는 경우 프롬프트없이 항상 파일을 다운로드하도록 선택할 수 있습니다 (하지만 이미 알고 있음).


네이티브 메시징 앱 아이디어를 사용하세요.

기본 앱은 문서가 좋지 않기 때문에 작성하기가 번거롭고 고통스럽고 JSON 형식이 양쪽에서 정확히 맞지 않으면 stdin과 stdout이 인수되기 때문에 콘솔에 아무것도 표시되지 않습니다.

그러나 표준 도구 (예 : Windows 탐색기, 16 진 편집기, TeamViewer ...)를 사용하여 파일을보고, 이동하고, 삭제하고, 그렇지 않으면 진행 상황을 볼 수 있으므로 작업이 완료되면 더 행복해질 것입니다. 크롬의 샌드 박스 파일 시스템은 작동하지만 이제는 막 다른 곳인 것 같습니다 (다른 브라우저에서는이를 선택하지 않았습니다). 아무도 그것을 위해 타사 도구를 개발하지 않을 것입니다. 물론 모든 것이 작동하면 도구가 필요하지 않을 수 있지만, 그 전까지는 어떤 파일이 어떤 디렉토리, 파일 버전, 나머지에 있는지 추적하기 위해 코드 (그리고 많은 코드)를 작성해야하기 때문에 디버깅은 악몽입니다. 디스크 공간 ...

참고 URL : https://stackoverflow.com/questions/19802032/how-can-a-chrome-extension-save-many-files-to-a-user-specified-directory

반응형