上传文件代码

  web.config  

<add key="UploadPath" value="\\172.21.0.10\File" /><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;
} ///
/// 根据文件名(包含文件扩展名)获取要保存的文件夹名称 ///
public class FileHelper
{ ///
/// 根据文件名(包含文件扩展名)获取要保存的文件夹名称 ///
/// 文件名(包含文件扩展名)
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;
}
} ///
/// 记录日志帮助类 ///
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)
{

}
}
}


 

  常量

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


  具体上传文件代码

/// 
/// 上传文件到共享文件夹 ///
[HttpPost, Route("api/Upload/UploadAttachment")]
[AllowAnonymous] public ServiceResponse 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.SuccessResponse(msg, viewModel, code);
} ///
/// 连接远程共享文件夹 ///
/// 远程共享文件夹的路径
/// 用户名
/// 密码
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;
} ///
/// 向远程文件夹保存本地内容,或者从远程文件夹下载文件到本地 ///
/// 要保存的文件的路径,如果保存文件到共享文件夹,这个路径就是本地文件路径如:@"D:\1.avi"
/// 保存文件的路径,不含名称及扩展名
/// 保存文件的名称以及扩展名
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();
}
}