ASP.NET 上传文件到共享文件夹

  • A+
所属分类:.NET技术
摘要

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

创建共享文件夹参考资料: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();             }         }