using System; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Configuration; using System.Web; using System.Collections.Generic; using Bowin.Common.Utility; using Microsoft.AspNetCore.Http.Extensions; using Microsoft.Extensions.Configuration; namespace Bowin.Common { internal class FileServerSettings { public string UserName { get; set; } public string Password { get; set; } public string Url { get; set; } } /// /// FileManager 的摘要说明。 /// public class FileManager { public string ErrorMessage; private CredentialCache myCredentialCache; private FileServerSettings Settings; public FileManager() { this.ErrorMessage = ""; var configuration = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json") .Build(); Settings = configuration.GetSection("FileServer").Get(); if (Settings.Url.Length > 0) { if (Settings.Url.Substring(Settings.Url.Length - 1, 1) != "/") { Settings.Url = Settings.Url + "/"; } } this.myCredentialCache = new CredentialCache(); this.myCredentialCache.Add(new Uri(Settings.Url), "NTLM", new NetworkCredential(Settings.UserName, Settings.Password)); } public bool DeleteFile(string filename) { this.ErrorMessage = ""; HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Settings.Url + filename); request.Credentials = this.myCredentialCache; request.Method = "DELETE"; WebResponse response = null; try { response = request.GetResponse(); } catch (WebException ex) { this.ErrorMessage = ex.Message; return false; } finally { if (response != null) { response.Close(); } } return true; } public bool IsFileExist(string filename) { this.ErrorMessage = ""; string text1 = ""; byte[] buffer1 = new ASCIIEncoding().GetBytes(text1); HttpWebRequest request = (HttpWebRequest) WebRequest.Create(Settings.Url + filename); request.Credentials = this.myCredentialCache; request.Method = "PROPFIND"; request.ContentType = "text/xml"; request.Headers.Add("Depth", "0"); request.Headers.Add("Translate: f"); request.ContentLength = buffer1.Length; Stream stream = request.GetRequestStream(); stream.Write(buffer1, 0, buffer1.Length); stream.Close(); WebResponse response = null; try { response = request.GetResponse(); } catch (WebException ex) { if (ex.Message.IndexOf("404") == -1) { this.ErrorMessage = ex.Message; throw ex; } return false; } finally { if (response != null) { response.Close(); } } return true; } public bool UploadFile(Stream inputStream, string filename) { this.ErrorMessage = ""; WebClient client = new WebClient(); client.Credentials = this.myCredentialCache; int num1 = (int)inputStream.Length; byte[] buffer1 = new byte[num1]; inputStream.Read(buffer1, 0, num1); Stream stream = client.OpenWrite(Settings.Url + filename, "PUT"); stream.Write(buffer1, 0, num1); try { stream.Close(); } catch (WebException ex) { this.ErrorMessage = ex.Message; return false; } return true; } public bool UploadFile(byte[] buffer, string filename) { this.ErrorMessage = ""; WebClient client = new WebClient(); client.Credentials = this.myCredentialCache; Stream stream = client.OpenWrite(Settings.Url + filename, "PUT"); stream.Write(buffer, 0, buffer.Length); try { stream.Close(); } catch (WebException ex) { this.ErrorMessage = ex.Message; return false; } return true; } public Stream ReadFile(string FileName) { Stream stream = System.IO.File.OpenRead(FileName); return stream; } /// /// 下载文件服务器中的文件 /// /// 目标文件的虚拟路径 /// 远程文件地址 public static void DownloadFile(string virtualFilePath, string remoteFile) { WebClient conn = new WebClient(); var targetFile = remoteFile; File.Delete(HttpHelper.MapPath(virtualFilePath)); if (!remoteFile.Trim().StartsWith("http") && !remoteFile.Trim().Contains("://")) { targetFile = new Uri(HttpHelper.Current.Request.GetDisplayUrl()).GetLeftPart(UriPartial.Authority); if (!remoteFile.StartsWith("/")) { targetFile += "/"; } targetFile += remoteFile; } conn.DownloadFile(targetFile, HttpHelper.MapPath(virtualFilePath)); } } }