using TouchSocket.Core;
using TouchSocket.Dmtp;
using TouchSocket.Dmtp.FileTransfer;
namespace FileSend
{
internal class MyPlugin : PluginBase, IDmtpFileTransferringPlugin, IDmtpFileTransferredPlugin
{
private readonly ILog m_logger;
public MyPlugin(ILog logger)
{
this.m_logger = logger;
}
///
/// 该方法,会在每个文件被请求(推送)结束时触发。传输不一定成功,具体信息需要从e.Result判断状态。
/// 其次,该方法也不一定会被执行,例如:在传输过程中,直接断网,则该方法将不会执行。
///
///
///
///
public async Task OnDmtpFileTransferred(IDmtpActorObject client, FileTransferredEventArgs e)
{
//传输结束,但是不一定成功,甚至该方法都不一定会被触发,具体信息需要从e.Result判断状态。
this.m_logger.Info($"传输文件结束,请求类型={e.TransferType},文件名={e.ResourcePath},请求状态={e.Result}");
await e.InvokeNext();
}
///
/// 该方法,会在每个文件被请求(推送)时第一时间触发。
/// 当请求文件时,可以重新指定请求的文件路径,即对e.ResourcePath直接赋值。
/// 当推送文件时,可以重新指定保存文件路径,即对e.SavePath直接赋值。
///
/// 注意:当文件夹不存在时,需要手动创建。
///
///
///
///
public async Task OnDmtpFileTransferring(IDmtpActorObject client, FileTransferringEventArgs e)
{
foreach (var item in e.Metadata.Keys)
{
Console.WriteLine($"Key={item},Value={e.Metadata[item]}");
}
e.IsPermitOperation = true;//每次传输都需要设置true,表示允许传输
//有可能是上传,也有可能是下载
this.m_logger.Info($"请求传输文件,请求类型={e.TransferType},请求文件名={e.ResourcePath}");
await e.InvokeNext();
}
}
}