2020年8月12日星期三

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

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

上传文件代码

  web.config  

 <!--上传文件配置,UploadPath值一定是服务器ip,内网ip最好--> <add key="UploadPath" value="\\172.21.0.10\File" /> <add key="DownloadPath" value="" /> <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.130\Resource";   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();   }  }
ASP.NET 上传文件到共享文件夹零基础学会亚马逊图片制作ChannelAdvisor携手拉丁美洲最大电商平台Mercadolibre CBT诚意来深招商!dhl亚马逊全球物流亚马逊欧洲站开店怎么样?欧洲站市场如何?30天学会开店:从零开始了解shopify之Facebook广告创意制作--Day20怎么辨别真假鱼翅呢?回笼票是什么票啊?哪些人群不适宜泡温泉?

没有评论:

发表评论