メディア プレーヤーを使用して再生するために、サーバー上のファイルのファイル パスをクライアントに送信したいと考えています。ソケットを使用せずsrc
に要素の属性に連結するために、クライアント側でその文字列を取得するにはどうすればよいですか?<video
サーバー スニペット:
res.set('content-type', 'text/plain');
res.send('/files/download.mp4');
これは、フレームワークなしでサーバーにリクエストを送信する方法です。「/path_to_page」は、リクエストを処理することになっているページに設定したルートです。
var xhr = new XMLHttpRequest();
xhr.open('GET', '/path_to_page', true);
xhr.onload = function(e) {
if (this.status == 200) {
console.log(this.responseText); // output will be "/files/download.mp4"
}
};
xhr.send();
}
いくつかのパラメーターを送信することもできます。
var formdata = new FormData();
formdata.append("param_name", "value");
たとえば、ファイル名などを送信したい場合があります。
最初のコード スニペットから 2 行を変更するだけです。1つは
xhr.open('POST', '/path_to_page', true); // set to post to send the params
xhr.send(formdata); // send the params
サーバーでパラメーターを取得するには、エクスプレスを使用している場合、それらは req.body.param_name にあります
どのフレームワークを使用していますか?プロジェクトディレクトリのベースパスをajaxで宣言し、その後にファイルを宣言できます。
jQuery.ajax({
type: "GET",
url: "/files/download.mp4",
});
express
(on node
) を使用しているため、 socket.ioを使用できます。
サーバ:
var io = require('socket.io').listen(80),
fs = require('fs');
io.sockets.on('connection', function (socket) {
socket.on('download', function(req) {
fs.readFile(req.path, function (err, data) {
if (err) throw err;
socket.emit('video', { video: data });
});
});
});
クライアント:
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect('http://localhost');
...
// request a download
socket.emit('download', { path: '/files/download.mp4' });
// receive a download
socket.on('video', function (data) {
// do sth with data.video;
});
...
</script>
編集:ソケットを使用したくないことに気づきませんでした。それでも、それは実行可能な解決策です。