function sendMessage(data) { {#const radioInput = form.check.value;#} const fileInput = document.getElementById("file"); {#const radioInput = form.check.value;#} const radioInput = document.getElementsByName('check') fileInput.addEventListener('change', (event) => { const file = event.target.files[0]; const reader = new FileReader(); reader.onload = (event) => { const fileData = event.target.result; const selectedValue = Array.from(radioInput).find(input => input.checked).value; const data = { option: selectedValue, file: fileData, }; {#return data#} console.log("开始传") console.log(selectedValue) console.log(fileData) console.log(fileData) socket.send(JSON.stringify(data)); }; reader.readAsArrayBuffer(file); }); }class ChatConsumer(WebsocketConsumer): def websocket_connect(self, message): # 接收客户端请求 self.accept() self.send("连接") def websocket_receive(self, event,): # self.send() print(event) self.send("已收到") data = json.loads(event['text']) print(data) file_data = data.get('file') check = data.get('option') file_data_bytes = json.dumps(file_data).encode() print(check) print(file_data) with open('received_file.xlsx', 'wb') as file: file.write(file_data_bytes) file.close() self.send('正在打开数据...') df = pd.read_excel('received_file.xlsx',engine='openpyxl') excel文件出现损坏
时间: 2024-02-14 07:29:18 浏览: 89
sendmessage:SendMessage是一个将Windows消息发送到任何窗口的小工具
从你提供的代码来看,问题可能出在文件数据的传递上。在 JavaScript 中,`FileReader` 的 `readAsArrayBuffer()` 方法是异步的,所以你需要确保在读取完成后再将数据发送到服务器。
另外,在 Python 代码中,你使用了 `json.dumps()` 将文件数据转换为 JSON 格式,并使用 `json.loads()` 将其转换回字节形式。这个过程可能导致文件数据格式的损坏。
为了解决这个问题,你可以直接将文件数据作为二进制数据传递,并在 Python 代码中直接写入文件。以下是修改后的代码示例:
```javascript
function sendMessage(data) {
const fileInput = document.getElementById("file");
const radioInput = document.getElementsByName('check')
fileInput.addEventListener('change', (event) => {
const file = event.target.files[0];
const reader = new FileReader();
reader.onload = (event) => {
const fileData = event.target.result;
const selectedValue = Array.from(radioInput).find(input => input.checked).value;
const formData = new FormData();
formData.append('file', file);
formData.append('option', selectedValue);
console.log("开始传")
console.log(selectedValue)
console.log(file)
socket.send(formData);
};
reader.readAsArrayBuffer(file);
});
}
```
在 Python 代码中,你可以直接读取传递过来的文件数据,并写入到本地文件中,而无需进行额外的处理:
```python
from channels.generic.websocket import WebsocketConsumer
import json
import pandas as pd
class ChatConsumer(WebsocketConsumer):
def websocket_connect(self, message):
self.accept()
self.send("连接")
def websocket_receive(self, event):
print(event)
self.send("已收到")
data = event['text']
file_data = data.get('file')
check = data.get('option')
with open('received_file.xlsx', 'wb') as file:
file.write(file_data)
self.send('正在打开数据...')
df = pd.read_excel('received_file.xlsx', engine='openpyxl')
```
这样修改后,应该能够正确地将文件数据传递到后台并正确处理。请注意确保后台的逻辑能够正确接收和处理这些数据。同时,还要确保客户端和服务器端的代码是一致的,以避免出现其他问题。
阅读全文