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

时间:2015-09-30 18:14:56

标签: javascript file testing server-side

我在Web服务器上使用JavaScript生成HTML代码,HTML包含一个ID为“ImageID”且src参数指向“Picture1.jpg”的对象。

我想每5秒刷新一次网页并使用Javascript生成一个新的文件路径,使用递增的数字来表示“Picture2.jpg”或“Picture3.jpg”但是我想使用Javascript检查是否有这样的在尝试使用

刷新img对象之前,服务器上存在新文件名
document.getElementById("ImageID").src="Picture2.jpg";  

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

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

谢谢大家。

3 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

感谢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>

答案 2 :(得分:0)

我正在使用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);
    });
});