Я хотел поделиться чем-то интересным и, надеюсь, получить объяснение этого поведения. Это так. Я создал страницу, и все, что она делает, это загружает файл на сервер.
const input = document.getElementById("input");
const button = document.getElementById("button");
button.addEventListener("click", () => {
const file = input.files[0];
const xhr = new XMLHttpRequest();
xhr.open("POST", "http://localhost:4000");
const formData = new FormData();
formData.append(input.id, file);
xhr.onload = () => {
console.log(xhr.response);
};
xhr.send(formData);
});
сервер
const http = require("http");
const express = require("express");
const app = express();
const upload = require("express-fileupload");
const cors = require("cors");
const fs = require("fs");
app.use(cors());
app.use(upload());
const server = http.createServer(app).listen(4000);
app.use("/", express.static(__dirname + "/client"));
app.post("/", (req, res) => {
fs.appendFile("./uploads/" + req.files.input.name, req.files.input.data,
() => {
res.send("file uploaded");
}
);
});
На p c работает нормально. Из любопытства я хотел протестировать это на своем устройстве android. Мой p c подключен к мобильной точке доступа, а я go cmd> ipconfig, чтобы получить IP-адрес. Теперь я захожу на страницу своего телефона, и когда я нажимаю кнопку «Загрузить», ничего не происходит, файл не добавляется в папку на сервере. Я думаю, что, возможно, прослушиватель событий onclick не работает на android, поэтому я тестирую его, удаляя HTTP-запрос и меняя цвет фона при нажатии. Оно работает. Я решил использовать отладку по USB, чтобы получить доступ к chrome инструментам разработчика на android. А затем я пытаюсь загрузить снова.
На этот раз все работает!
Думаю, может это как-то связано с тем, что телефон сейчас подключается к p c по usb. Я выхожу из инструментов android chrome dev и снова пытаюсь загрузить через USB-соединение. Опять же, НЕ работает, файл не добавлен в папку на сервере.
Кто-нибудь знает, почему ТОЛЬКО при использовании android инструментов разработки работает?