SignalR是一個實時通信庫,可以在Web應用程序中實現實時通信功能。要實現文件同步與共享,可以使用SignalR來實現實時更新和傳輸文件。
以下是一個簡單的示例,演示如何使用SignalR實現文件同步與共享:
public class FileHub : Hub
{
public async Task UploadFile(byte[] fileData, string fileName)
{
// 保存文件到服務器
// 廣播文件給其他連接的客戶端
await Clients.All.SendAsync("FileUploaded", fileData, fileName);
}
public async Task DownloadFile(string fileName)
{
// 從服務器獲取文件數據
// 發送文件給連接的客戶端
byte[] fileData = // 從服務器獲取文件數據的邏輯
await Clients.Caller.SendAsync("FileDownloaded", fileData, fileName);
}
}
public void ConfigureServices(IServiceCollection services)
{
...
services.AddSignalR();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseSignalR(routes =>
{
routes.MapHub<FileHub>("/filehub");
});
}
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/signalr/3.1.11/signalr.min.js"></script>
<script>
var connection = new signalR.HubConnectionBuilder().withUrl("/filehub").build();
connection.on("FileUploaded", function (fileData, fileName) {
// 處理接收到的文件數據
});
connection.on("FileDownloaded", function (fileData, fileName) {
// 處理接收到的文件數據
});
connection.start().then(function () {
// 文件上傳功能
$("#uploadButton").click(function () {
var fileInput = document.getElementById("fileInput");
var file = fileInput.files[0];
var reader = new FileReader();
reader.onload = function (e) {
var fileData = e.target.result;
connection.invoke("UploadFile", fileData, file.name);
};
reader.readAsArrayBuffer(file);
});
// 文件下載功能
$("#downloadButton").click(function () {
var fileName = "example.txt";
connection.invoke("DownloadFile", fileName);
});
}).catch(function (err) {
console.error(err.toString());
});
</script>
通過以上步驟,就可以實現使用SignalR實時同步和共享文件的功能。當一個客戶端上傳文件時,其他連接的客戶端會收到文件數據,并可以實時下載文件。