WebClient上载文件——实现将本地文件同步到远端服务器上

问题描述

用户上传产品示例图片到服务器端上,客户端在请求图片资源时,当服务端架设了多个节点的情况下,由于没有负载均衡请求到保存图片资源的服务器,出现图片访问404的问题。

这里保存上传文件时,同时需要将该文件保存到其他的服务器上。需要用到 W e b C l i e n t \textcolor{red}{WebClient } WebClientWebClient介绍

本篇文章为该方法实现的一个记录。
在这里插入图片描述

实现方案

本篇文章中用到了WebClient的同步方法 UploadFile方法。

byte[] UploadFile(Uri address, string fileName)

  • 1 address 一个POST网络资源,本片文章中为一个文件下载保存到服务器端的一个接口地址。
  • 2 fileName 文件的物理路径
  • 3 网络资源处理的返回结果【字节数组的形式返回】,
    public  class ReturnMessageModel<T>
    {
        /// <summary>
        /// 错误代码,有時沒有,只做特殊判斷用
        /// </summary>
        public string Code { get; set; } = "";


        /// <summary>
        /// 0表示成功,1表示失敗,3表示Token 失效或者無效
        /// </summary>
        public int Status { get; set; }

        /// <summary>
        /// 提示信息
        /// </summary>
        public string Message { get; set; } = "";

        /// <summary>
        ///  返回數據
        /// </summary>
        public T Data { get; set; } = default(T);
}
    /// <summary>
    /// 文件上传
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    [EnableCors("any")]
    [Produces("application/json")]
    public class FileController :ControllerBase
    {


        /// <summary>
        /// 文件上傳(from表單方式)
        /// </summary>
        /// <param name="file">文件</param>
        /// <returns></returns>
        [HttpPost]
        public async Task<ReturnMessageModel<string>> UploadFiles(IFormFile file)
        {
            ReturnMessageModel<string> result = new ReturnMessageModel<string>();
            try
            {
                //获得文件后缀信息
                string originName = file.FileName;
                //文件保存路径
                string rootPath = Directory.GetCurrentDirectory();
                rootPath = rootPath.Replace("\\", "/");
                string destination = rootPath + AMSConstant.FILE_ROOT_PATH + "/" + originName;
                DirectoryInfo info = new DirectoryInfo(rootPath + AMSConstant.FILE_ROOT_PATH);
                if (!info.Exists){
                    //创建父级文件夹
                    info.Create();
                }
                using (FileStream f = System.IO.File.Create(destination))
                {
                    await file.CopyToAsync(f);
                };
                result.Code = "0";
                result.Status = 0;
                result.Message = "上传文件成功";
                return result;
            }
            catch (Exception e) 
            {
                return new ReturnMessageModel<string>("1",1,"上传文件失败",null);
            }
            
            
        }

当运行项目后,该上传文件保存的接口URI 为 http://localhost:50911/api/File/UploadFiles。测试WebClient 的上载文件功能代码如下。将本地文件1.txt同步到资源处理的URI上。【在实际部署的时候,这个URI是需要同步服务器上的URI】

       [HttpGet]
        public ReturnMessageModel<string> WebClientTest()
        {
            WebClient client = new WebClient();
            string url = "http://localhost:50911/api/File/UploadFiles";
            string file = "C:\\Users\\F1336301\\Desktop\\1.txt";
            byte[] bytes = client.UploadFile(url, file);
            //根据回传标识后,更新数据 
            string response = Encoding.UTF8.GetString(bytes);
            var obj = JObject.Parse(response);
            if (obj.GetValue("Code").ToObject<int>() == 0)
            {
               //忽略响应成功后的逻辑
            }
            return new ReturnMessageModel<string>("success");
        }

当请求WebClientTest时,发现文件已经保存到指定文件夹。
在这里插入图片描述

结语

本片文章主要提供了一个本地文件同步到远端服务器的一个参考方法,如有其它的解决方案希望和大家一起共享。

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值