JavaScript로 수행 된 로컬 파일 조작이 있습니까? Adobe AIR 필요와 같은 설치 공간없이 달성 할 수있는 솔루션을 찾고 있습니다 .
특히, 파일에서 내용을 읽고 해당 내용을 다른 파일에 쓰고 싶습니다. 이 시점에서 나는 권한을 얻는 것에 대해 걱정하지 않고 이미 이러한 파일에 대한 모든 권한을 가지고 있다고 가정합니다.
답변
사용자가 파일을 통해 선택하면 <input type="file">
, 당신은 수 읽기 와 과정 파일이 사용하여 해당 파일 API를 .
의도적으로 임의의 파일을 읽거나 쓰는 것은 허용되지 않습니다. 샌드 박스를 위반 한 것입니다. 에서 위키 백과 -> 자바 스크립트 -> 보안 :
JavaScript와 DOM은 악의적 인 작성자가 웹을 통해 클라이언트 컴퓨터에서 실행할 스크립트를 제공 할 수있는 가능성을 제공합니다. 브라우저 작성자는 두 가지 제한 사항을 사용하여이 위험을 포함합니다. 먼저 스크립트는 샌드 박스에서 실행되며 파일 작성 과 같은 범용 프로그래밍 작업이 아니라 웹 관련 작업 만 수행 할 수
있습니다 .
2016 UPDATE : 직접 파일 시스템을 액세스하는 것은 통해 가능하다 파일 시스템 API 되고, 단지 크롬과 오페라에서 지원 하고 다른 브라우저에 의해 구현되고 있지 끝낼 수 있습니다 합니다 (와 에지의 예외 ). 자세한 내용은 Kevin의 답변을 참조하십시오 .
답변
HTML5 기능의 업데이트는 http://www.html5rocks.com/en/tutorials/file/dndfiles/에 있습니다. 이 훌륭한 기사는 JavaScript에서 로컬 파일 액세스에 대해 자세히 설명합니다. 언급 된 기사의 요약 :
이 사양은 ‘local’파일 시스템에서 파일 에 액세스하기 위한 몇 가지 인터페이스를 제공합니다 .
- 파일-개별 파일; 이름, 파일 크기, MIME 유형 및 파일 핸들에 대한 참조와 같은 읽기 전용 정보를 제공합니다.
- FileList-배열과 비슷한 File 객체 시퀀스입니다.
<input type="file" multiple>
데스크탑에서 파일 디렉토리를 생각 하거나 드래그 하십시오 . - Blob-파일을 바이트 범위로 분할 할 수 있습니다.
아래의 Paul D. Waite의 의견을 참조하십시오.
답변
업데이트이 기능은 Firefox 17부터 제거되었습니다 ( https://bugzilla.mozilla.org/show_bug.cgi?id=546848 참조 ).
Firefox에서는 (프로그래머) JavaScript 파일 내에서이를 수행 할 수 있습니다.
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead");
netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserWrite");
그리고 귀하 (브라우저 사용자)에게 액세스를 허용하라는 메시지가 표시됩니다. (Firefox의 경우 브라우저를 시작할 때마다이 작업을 수행하면됩니다.)
브라우저 사용자가 다른 사람인 경우 권한을 부여해야합니다.
답변
앞에서 언급 한 것처럼 FileWriter API 와 함께 FileSystem 및 File API를 사용하여 브라우저 탭 / 창의 컨텍스트에서 클라이언트 시스템으로 파일을 읽고 쓸 수 있습니다.
FileSystem 및 FileWriter API와 관련하여 몇 가지 알아야 할 사항이 있지만 그중 일부는 언급되었지만 반복 할 가치가 있습니다.
- API 구현은 현재 Chromium 기반 브라우저 (Chrome & Opera)에만 존재합니다.
- 두 API 모두 2014 년 4 월 24 일 W3C 표준 트랙에서 제거되었으며 현재는 독점적입니다.
- 향후 브라우저 구현에서 (현재 독점적 인) API를 제거 할 가능성이 있습니다
- 샌드 박스 (파일이 더 효과를 얻을 수있는 디스크의 외부에 위치)은 API를 사용하여 생성 된 파일을 저장하는 데 사용
- 가상 파일 시스템 사용 (반드시이 브라우저 내에서 액세스 않는 것과 같은 형태로 디스크에 존재하지 않는 디렉토리 구조) API를 사용하여 만든 파일을 나타냅니다
다음은 이러한 작업을 수행하기 위해 API가 직간접 적으로 사용되는 방법에 대한 간단한 예입니다.
구운 상품 *
파일 쓰기 :
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
파일 읽기 :
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
원시 파일, FileWriter 및 FileSystem API 사용
파일 쓰기 :
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
파일 읽기 :
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
FileSystem 및 FileWriter API는 더 이상 표준 트랙에 있지 않지만 다음과 같은 이유로 일부 경우에 사용이 정당화 될 수 있습니다.
- 구현되지 않은 브라우저 공급 업체의 새로운 관심으로 다시 브라우저를 배치 할 수 있습니다.
- (크롬 기반) 브라우저 구현의 시장 침투력이 높음
- Google (Chromium의 주요 기여자)이 API에 대해 수명을 다하지 않았습니다.
그러나 “일부 사례”가 자신의 사례를 포함하는지 여부는 귀하가 결정하는 것입니다.
* BakedGoods는이 사람 이외의 다른 사람에 의해 유지됩니다 🙂
답변
NW.js를 사용하면 일반적으로 브라우저에 적용되는 모든 보안 제한없이 Javascript를 사용하여 데스크탑 응용 프로그램을 만들 수 있습니다. 따라서 함수로 실행 파일을 실행하거나 파일을 작성 / 편집 / 읽기 / 쓰기 / 삭제할 수 있습니다. 현재 CPU 사용량 또는 사용중인 총 램 등과 같은 하드웨어에 액세스 할 수 있습니다.
설치가 필요없는 Windows, Linux 또는 Mac 데스크탑 응용 프로그램을 만들 수 있습니다.
다음은 Universal GUI 인 NW.js의 프레임 워크입니다.
답변
Windows에 배포하는 경우 Windows 스크립트 호스트 는 파일 시스템 및 기타 로컬 리소스에 매우 유용한 JScript API를 제공합니다. 그러나 WSH 스크립트를 로컬 웹 응용 프로그램에 통합하는 것은 원하는만큼 우아하지 않을 수 있습니다.
답변
다음과 같은 입력 필드가 있다면
<input type="file" id="file" name="file" onchange="add(event)"/>
BLOB 형식으로 컨텐츠를 파일링 할 수 있습니다.
function add(event){
var userFile = document.getElementById('file');
userFile.src = URL.createObjectURL(event.target.files[0]);
var data = userFile.src;
}
![](http://daplus.net/wp-content/uploads/2023/04/coupang_part-e1630022808943-2.png)