使用服务器端Javascript检查web服务器上的文件是否存在

Checking existance of a file on web server using server-side Javascript

本文关键字:文件 是否 存在 服务器 web 服务器端 Javascript 检查      更新时间:2023-09-26

我在web服务器上使用JavaScript生成HTML代码,HTML包含一个id为"ImageID"的对象和一个指向"Picture1.jpg"的src参数。

我想刷新网页每5秒和使用Javascript生成一个新的文件路径使用递增数字说"Picture2.jpg"或"Picture3.jpg",但我想使用Javascript检查是否存在这样一个新的文件名在服务器上尝试使用

刷新img对象之前
document.getElementById("ImageID").src="Picture2.jpg";  

如何使用服务器端JavaScript来测试特定服务器端文件的存在?

这是一个简单的FileExists()方法,还是必须以某种方式查询document.getElementById(ImageName)返回的对象,以确定它是否成功找到了文件。

谢谢大家。

您可以使用XMLHttpRequest请求检查在相同的服务器上是否存在文件,并检查响应代码是否为200,即:

<script>
    var http = new XMLHttpRequest();
    http.open('HEAD', "https://yourserver/file.jpg", false);
    http.send();
    console.log(http.status);
</script>

注意:如果cors未设置,则无法使用XMLHttpRequest查询远程服务器

感谢Pedro Lobito提供的答案。下面的代码对我有效。

<script TYPE="text/javascript">
function FileExists(FullFilePath) // Thanks to advice from Pedro Lobito
{         
    var http = new XMLHttpRequest(); // Best placed outside function
    http.open('HEAD', FullFilePath, false);
    http.send();  // This sets http.status to 200 if file exists (404 if not)
    return (http.status == 200);
}
// Example of call
TheFileExisis = FileExists("http://MyArea/MyWebHost.net/Images/Picture2.jpg");
</script>

我正在使用MOCHA CHAI进行单元测试,我们有点击按钮下载PDF的链接。

——server.js

const express = require('express');
const path = require('path');
const app = express();
const port = 3000;
let userLang;
app.use(express.static('public'));
app.get('/files/:file(*)', (req, res, next) => {
    const file = req.params.file;
    const pathToFile = path.join(__dirname, '/files/', file);
    res.download(pathToFile, (err) => {
        if (!err) return; // file sent
        if (err && err.status !== 404) {
            next(err);
        }
        res.statusCode = 404;
        res.send('Cant find that file, sorry!');
    });
});

——server.spec.js

import request from 'supertest';
const server = require('../../server/server');
describe('loading express', () => {
    let server;
    beforeEach(() => {
        server.start();
    });
    afterEach(() => {
        server.close();
    });
    it('should responds successfully to /', (done) => {
        request(server)
            .get('/')
            .expect(200, done);
    });

    it('should have download file', (done) => {
        request(server)
            .get('/files/XYZ.pdf')
            .expect(200, done);
    });
});