zoukankan      html  css  js  c++  java
  • ASP.NET 上传文件到共享文件夹

    创建共享文件夹参考资料:https://www.cnblogs.com/dansediao/p/5712657.html

    上传文件代码

      web.config  

        <!--上传文件配置,UploadPath值一定是服务器ip,内网ip最好-->
        <add key="UploadPath" value="\172.21.0.10File" />
        <add key="DownloadPath" value="http://x.x.x.x:80/" />
        <add key="UserName" value="ShareUser" />
        <add key="Password" value="P@ssw0rd" />

      工具方法  

            public static string GetConfigString(string key, string @default = "")
            {
                return ConfigurationManager.AppSettings[key] ?? @default;
            }
    
        /// <summary>
        /// 根据文件名(包含文件扩展名)获取要保存的文件夹名称
        /// </summary>
        public class FileHelper
        {
            /// <summary>
            /// 根据文件名(包含文件扩展名)获取要保存的文件夹名称
            /// </summary>
            /// <param name="fileName">文件名(包含文件扩展名)</param>
            public static string GetSaveFolder(string fileName)
            {
                var fs = fileName.Split('.');
                var ext = fs[fs.Length - 1];
                var str = string.Empty;
                var t = ext.ToLower();
                switch (t)
                {
                    case "jpg":
                    case "jpeg":
                    case "png":
                    case "gif":
                        str = "images";
                        break;
                    case "mp4":
                    case "mkv":
                    case "rmvb":
                        str = "video";
                        break;
                    case "apk":
                    case "wgt":
                        str = "app";
                        break;
                    case "ppt":
                    case "pptx":
                    case "doc":
                    case "docx":
                    case "xls":
                    case "xlsx":
                    case "pdf":
                        str = "file";
                        break;
                    default:
                        str = "file";
                        break;
                }
    
                return str;
            }
        }
    
        /// <summary>
        /// 记录日志帮助类
        /// </summary>
        public class WriteHelper
        {
            public static void WriteFile(object data)
            {
                try
                {
                    string path = $@"C:Log";
                    var filename = $"Log.txt";
                    if (!Directory.Exists(path))
                        Directory.CreateDirectory(path);
                    TextWriter tw = new StreamWriter(Path.Combine(path, filename), true); //true在文件末尾添加数据
    
                    tw.WriteLine($"----产生时间:{DateTime.Now:yyyy-MM-dd HH:mm:ss}---------------------------------------------------------------------");
    
                    tw.WriteLine(data.ToJson());
                    tw.Close();
                }
                catch (Exception e)
                {
    
                }
            }
        }

      常量

        /// <summary>
        /// 文件上传配置项
        /// </summary>
        public class FileUploadConst
        {
            /// <summary>
            /// 上传地址
            /// </summary>
            public static string UploadPath => ConfigHelper.GetConfigString("UploadPath");
    
            /// <summary>
            /// 文件访问/下载地址
            /// </summary>
            public static string DownloadPath => ConfigHelper.GetConfigString("DownloadPath");
    
            /// <summary>
            /// 访问共享目录用户名
            /// </summary>
            public static string UserName => ConfigHelper.GetConfigString("UserName");
    
            /// <summary>
            /// 访问共享目录密码
            /// </summary>
            public static string Password => ConfigHelper.GetConfigString("Password");
        }

      具体上传文件代码

            /// <summary>
            /// 上传文件到共享文件夹
            /// </summary>
            [HttpPost, Route("api/Upload/UploadAttachment")]
            [AllowAnonymous]
            public ServiceResponse<UploadRespModel> UploadAttachment()
            {
                var viewModel = new UploadRespModel();
                var code = 200;
                var msg = "上传失败!";
    
                var path = FileUploadConst.UploadPath; //@"\172.16.10.130Resource";
                var s = connectState(path, FileUploadConst.UserName, FileUploadConst.Password);
    
                if (s)
                {
                    var filelist = HttpContext.Current.Request.Files;
                    if (filelist.Count > 0)
                    {
                        var file = filelist[0];
                        var fileName = file.FileName;
                        var blobName = FileHelper.GetSaveFolder(fileName);
                        path = $@"{path}{blobName}";
    
                        fileName = $"{DateTime.Now:yyyyMMddHHmmss}{fileName}";
    
                        //共享文件夹的目录
                        var theFolder = new DirectoryInfo(path);
                        var remotePath = theFolder.ToString();
                        Transport(file.InputStream, remotePath, fileName);
    
                        viewModel.SaveUrl = $"{blobName}/{fileName}";
                        viewModel.DownloadUrl = PictureHelper.GetFileFullPath(viewModel.SaveUrl);
    
                        msg = "上传成功";
                    }
                }
                else
                {
                    code = CommonConst.Code_OprateError;
                    msg = "链接服务器失败";
                }
    
                return ServiceResponse<UploadRespModel>.SuccessResponse(msg, viewModel, code);
            }
    
            /// <summary>
            /// 连接远程共享文件夹
            /// </summary>
            /// <param name="path">远程共享文件夹的路径</param>
            /// <param name="userName">用户名</param>
            /// <param name="passWord">密码</param>
            private static bool connectState(string path, string userName, string passWord)
            {
                bool Flag = false;
                Process proc = new Process();
                try
                {
                    proc.StartInfo.FileName = "cmd.exe";
                    proc.StartInfo.UseShellExecute = false;
                    proc.StartInfo.RedirectStandardInput = true;
                    proc.StartInfo.RedirectStandardOutput = true;
                    proc.StartInfo.RedirectStandardError = true;
                    proc.StartInfo.CreateNoWindow = true;
                    proc.Start();
                    string dosLine = "net use " + path + " " + passWord + " /user:" + userName;
                    WriteHelper.WriteFile($"dosLine:{dosLine}");
                    proc.StandardInput.WriteLine(dosLine);
                    proc.StandardInput.WriteLine("exit");
                    while (!proc.HasExited)
                    {
                        proc.WaitForExit(1000);
                    }
    
                    string errormsg = proc.StandardError.ReadToEnd();
                    proc.StandardError.Close();
                    WriteHelper.WriteFile($"errormsg:{errormsg}");
                    if (string.IsNullOrEmpty(errormsg))
                    {
                        Flag = true;
                    }
                    else
                    {
                        throw new Exception(errormsg);
                    }
                }
                catch (Exception ex)
                {
                    WriteHelper.WriteFile(ex);
                    throw ex;
                }
                finally
                {
                    proc.Close();
                    proc.Dispose();
                }
    
                return Flag;
            }
    
            /// <summary>
            /// 向远程文件夹保存本地内容,或者从远程文件夹下载文件到本地
            /// </summary>
            /// <param name="inFileStream">要保存的文件的路径,如果保存文件到共享文件夹,这个路径就是本地文件路径如:@"D:1.avi"</param>
            /// <param name="dst">保存文件的路径,不含名称及扩展名</param>
            /// <param name="fileName">保存文件的名称以及扩展名</param>
            private static void Transport(Stream inFileStream, string dst, string fileName)
            {
                WriteHelper.WriteFile($"目录-Transport:{dst}");
                if (!Directory.Exists(dst))
                {
                    Directory.CreateDirectory(dst);
                }
    
                dst = dst + fileName;
    
                if (!File.Exists(dst))
                {
                    WriteHelper.WriteFile($"文件不存在,开始保存");
                    var outFileStream = new FileStream(dst, FileMode.Create, FileAccess.Write);
    
                    var buf = new byte[inFileStream.Length];
    
                    int byteCount;
    
                    while ((byteCount = inFileStream.Read(buf, 0, buf.Length)) > 0)
                    {
                        outFileStream.Write(buf, 0, byteCount);
                    }
                    WriteHelper.WriteFile($"保存完成");
                    inFileStream.Flush();
    
                    inFileStream.Close();
    
                    outFileStream.Flush();
    
                    outFileStream.Close();
                }
            }
  • 相关阅读:
    Matplotlib 绘图库 基本使用方法
    linux socat命令
    linux shell重定向
    linux man命令
    bashttpd使用手册
    libcurl代码示例
    vim文件头部注释配置
    linux join命令
    iterm2切换显示屏vim乱行解决
    分形与混沌
  • 原文地址:https://www.cnblogs.com/dawenyang/p/13493179.html
Copyright © 2011-2022 走看看