Javascript로 폴더의 파일 이름 목록 가져 오기


84

내 웹 사이트는 /assets/photos/폴더 에서 많은 사진을 제공하고 있습니다 . Javascript로 해당 폴더의 파일 목록을 어떻게 얻을 수 있습니까?


5
당신은 무엇을 시도 했습니까? 그리고 어떤 컨텍스트에서 파일 목록을 검색 하시겠습니까? 브라우저에서 또는 node.js가있는 서버에서?
David Barker

그리고 어떤 브라우저를 지원하고 있습니까?
Simpal 쿠마

이 @ 마이크 단지 크롬의 최신 버전입니다
bevanb

@Mike 브라우저 선택이 정말 중요한지 의심합니다. 브라우저는 서버가 표시하지 않는 한 파일 목록에 액세스 할 수 없습니다.
Mike Cluck 2015

@ MikeC 당신이 맞아요. ActiveXObject클라이언트 시스템 파일 시스템에 액세스하기 위해 IE 에 대해 생각하고있었습니다 . 그래서 물었습니다.
Simpal Kumar 2015

답변:


87

현재 코드는 모든 파일을 나열하려는 서버 측에 있다고 가정하여 폴더의 모든 파일 목록을 제공합니다.

var fs = require('fs');
var files = fs.readdirSync('/assets/photos/');

11
클라이언트에서 파일 목록에 액세스하는 것을 의미했습니다. 미안하지만 더 명확하지 않았습니다.
bevanb

8
require ()는 어디에서 왔거나 정의됩니까 ??? 코드에서 " 'require'is not defined"오류가 발생합니다. 코드를 테스트 했습니까? 그렇다면 'require'와 관련된 중요한 부분을 놓친 적이 있습니까?
Apostolos

5
@Apostolos OP가 설명에서 언급했듯이 이것은 서버 측 코드 여야합니다. 브라우저에서는 실행할 수 없습니다. Node.js로이 스크립트를 실행하면 오류가 발생하지 않습니다.
Naltroc

2
이것은 좋은 방법이지만 질문에 직접 대답하지 않는 것 같습니다. 간단한 대답은 아니오입니다. 클라이언트 측 (브라우저)의 JS에서는 서버 측의 폴더 / 디렉토리에있는 파일 목록을 가져 오는 직접적인 방법이 없습니다.
Akshay Hiremath

require ()는 nodejs에서만 지원됩니다
Dulmina

35

아니요, Javascript는 파일 시스템에 액세스 할 수 없습니다. 서버 측 자바 스크립트 는 완전히 다른 이야기이지만 당신이 그것을 의미하지는 않습니다.


10
이것은 더 이상 사실이 아닙니다. 파일 API는 중요합니다.
superluminary

1
@superluminary, 그렇다면 어떻게 그 API를 사용하여 이것을 할 수 있습니까?
2540625

@jtheletter API가 서버에서 실행되고 있으므로 서버에서 실행중인 스택을 사용합니다. 그것이 Node라면 fs.readdir이 될 것입니다.
슈퍼 루미 너리

1
라이브러리를 사용해야한다고 말하는 경우 JavaScript (바닐라)가 파일 시스템에 액세스 할 수 있다고 말하는 것과는 다릅니다.
2540625

13

dir.php 파일을 작성합니다.

var files = <?php $out = array();
foreach (glob('file/*.html') as $filename) {
    $p = pathinfo($filename);
    $out[] = $p['filename'];
}
echo json_encode($out); ?>;

스크립트에 다음을 추가하십시오.

<script src='dir.php'></script>

그리고 files [] 배열 사용


javascript로 files [] var를 어떻게 호출 / 사용합니까?
Leths

1
잡히지 않은 구문 오류 : 예기치 않은 토큰 '<'
2540625

1
@ 2540625는 순수한 자바 스크립트가 아닌 PHP입니다. php가 필요하고 작성자의 문제를 해결하지 못하더라도 php가 있다면 여전히 좋은 해결책입니다.
windowsboy111

또는 모든 파일을 나열 *.*하려면 파일 확장자를 보존하기 위해 scandir을 사용 하거나 사용하십시오.$out = scandir("."); echo json_encode($out);
Stardust

이것은 자바 스크립트가 아닙니다
scitronboy

10

클라이언트 측 파일의 경우 사용자의 로컬 디렉토리에있는 파일 목록을 가져올 수 없습니다.

사용자가 업로드 된 파일을 제공 한 경우 해당 input요소 를 통해 액세스 할 수 있습니다 .

<input type="file" name="client-file" id="get-files" multiple />


<script>
var inp = document.getElementById("get-files");
// Access and handle the files 

for (i = 0; i < inp.files.length; i++) {
    let file = inp.files[i];
    // do things with file
}
</script>

4

지정된 폴더의 파일 이름 목록을 얻으려면 다음을 사용할 수 있습니다.

fs.readdir(directory_path, callback_function)

이렇게하면 file[0],file[1], 등과 같은 간단한 목록 인덱싱으로 구문 분석 할 수있는 목록이 반환됩니다 .


2

특정 디렉토리의 모든 파일에 대해 다른 경로를 만들었습니다. 따라서 해당 경로로 이동하는 것은 해당 파일을 여는 것을 의미합니다.

function getroutes(list){
list.forEach(function(element) {
  app.get("/"+ element,  function(req, res) {
    res.sendFile(__dirname + "/public/extracted/" + element);
  });
});

이 함수를 호출하여 디렉토리의 파일 이름 목록을 전달하고 __dirname/public/extracted서버 측에서 렌더링 할 수있는 각 파일 이름에 대해 다른 경로를 생성했습니다.


1

Firefox 69.0 (Ubuntu에서)에서 다음 (줄여 진 코드)을 사용하여 디렉토리를 읽고 이미지를 디지털 사진 프레임의 일부로 표시합니다. 이 페이지는 HTML, CSS 및 JavaScript로 만들어졌으며 브라우저를 실행하는 동일한 컴퓨터에 있습니다. 이미지도 같은 컴퓨터에 있으므로 "외부"에서 볼 수 없습니다.

var directory = <path>;
var xmlHttp = new XMLHttpRequest();
xmlHttp.open('GET', directory, false); // false for synchronous request
xmlHttp.send(null);
var ret = xmlHttp.responseText;
var fileList = ret.split('\n');
for (i = 0; i < fileList.length; i++) {
    var fileinfo = fileList[i].split(' ');
    if (fileinfo[0] == '201:') {
        document.write(fileinfo[1] + "<br>");
        document.write('<img src=\"' + directory + fileinfo[1] + '\"/>');
    }
}

이를 위해서는 정책 security.fileuri.strict_origin_policy을 비활성화 해야합니다 . 이는 사용하려는 솔루션이 아닐 수도 있음을 의미합니다. 제 경우에는 괜찮다고 생각했습니다.


-2

다음 내용으로 'files.php'라는 PHP 파일을 만듭니다.

<?php 
$out = array();
foreach (glob('/assets/photos/*') as $filename) {
    $p = pathinfo($filename);
    $out[] = $p['basename'];
}
echo json_encode($out); 
?>

그런 다음 jQuery로 호출하십시오.

$.getJSON('files.php').then(function (response) {
     console.log(response);
});
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.