html实现可以发送png、jpg、txt、zip文件的聊天室不用后端语言源代码
时间: 2023-12-20 18:07:31 浏览: 82
这是一个使用 HTML5 和 JavaScript 实现的简单聊天室,可以发送 png、jpg、txt、zip 文件,不需要后端语言。但是要注意,这个聊天室并没有进行安全性的考虑,不适合用于生产环境。
HTML 代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件传输聊天室</title>
<style>
#messages {
height: 300px;
overflow: auto;
}
</style>
</head>
<body>
<div id="messages"></div>
<input type="text" id="input" placeholder="输入消息">
<input type="file" id="file" accept=".png, .jpg, .txt, .zip">
<button onclick="send()">发送</button>
<script>
const ws = new WebSocket('ws://localhost:8080');
ws.onmessage = function(event) {
const data = JSON.parse(event.data);
const messages = document.getElementById('messages');
const message = document.createElement('div');
if (data.type === 'message') {
message.innerHTML = `<strong>${data.username}</strong>: ${data.message}`;
} else if (data.type === 'file') {
const url = URL.createObjectURL(data.file);
if (data.file.type.includes('image')) {
message.innerHTML = `<strong>${data.username}</strong>: <img src="${url}" alt="image">`;
} else if (data.file.type.includes('text')) {
message.innerHTML = `<strong>${data.username}</strong>: <a href="${url}" download="${data.file.name}">${data.file.name}</a>`;
} else {
message.innerHTML = `<strong>${data.username}</strong>: <a href="${url}" download="${data.file.name}">${data.file.name} (${data.file.size} bytes)</a>`;
}
}
messages.appendChild(message);
};
function send() {
const input = document.getElementById('input');
const file = document.getElementById('file').files[0];
if (input.value.trim() || file) {
const message = input.value;
input.value = '';
const reader = new FileReader();
reader.onload = function(event) {
const data = {
type: 'message',
message,
};
if (file) {
data.type = 'file';
data.file = file;
}
ws.send(JSON.stringify(data));
};
if (file) {
reader.readAsArrayBuffer(file);
} else {
reader.readAsText(new Blob([message]));
}
}
}
</script>
</body>
</html>
```
这个聊天室使用 WebSocket 进行通信,发送的消息分为两种类型:普通文本消息和文件消息。发送文件时,可以通过 `<input type="file">` 元素进行选择,然后使用 `FileReader` 将文件转换为二进制数据,再通过 WebSocket 发送。
在接收到文件消息时,根据文件类型进行不同的处理。如果是图片文件,直接将其作为 `<img>` 元素的 `src` 属性值;如果是文本文件,创建一个 `<a>` 元素提供下载链接;如果是其他类型的文件,同样创建一个 `<a>` 元素,但显示文件大小信息。
这个聊天室的服务器端是使用 Node.js 和 WebSocket 模块实现的,代码如下:
```javascript
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function(ws) {
ws.on('message', function(message) {
const data = JSON.parse(message);
data.username = ws._socket.remoteAddress;
if (data.type === 'message') {
wss.clients.forEach(function(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(JSON.stringify(data));
}
});
} else if (data.type === 'file') {
wss.clients.forEach(function(client) {
if (client.readyState === WebSocket.OPEN) {
const fileReader = new FileReader();
fileReader.onload = function() {
data.file = new Uint8Array(this.result);
client.send(JSON.stringify(data));
};
fileReader.readAsArrayBuffer(data.file);
}
});
}
});
});
```
这个服务器端非常简单,只有一个 WebSocket 监听器,接收到消息后广播给所有客户端。在接收到文件消息时,先将文件转换为二进制数据,再广播给所有客户端。
阅读全文