簡體   English   中英

使用服務器端Javascript檢查Web服務器上文件的存在

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM