using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.IO;
using System.Drawing;
namespace CommLib
{
public class ShareFolder
{
[DllImport("advapi32.dll", SetLastError = true)]
private static extern bool LogonUser(string
lpszUsername, string lpszDomain, string lpszPassword,
int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool CloseHandle(IntPtr handle);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public extern static bool DuplicateToken(IntPtr existingTokenHandle,
int SECURITY_IMPERSONATION_LEVEL, ref IntPtr duplicateTokenHandle);
// logon types
const int LOGON32_LOGON_INTERACTIVE = 2;
const int LOGON32_LOGON_NETWORK = 3;
const int LOGON32_LOGON_NEW_CREDENTIALS = 9;
// logon providers
const int LOGON32_PROVIDER_DEFAULT = 0;
const int LOGON32_PROVIDER_WINNT50 = 3;
const int LOGON32_PROVIDER_WINNT40 = 2;
const int LOGON32_PROVIDER_WINNT35 = 1;
static string ShareUserName = System.Configuration.ConfigurationManager.AppSettings["ShareUserName"];
static string ShareDomain = System.Configuration.ConfigurationManager.AppSettings["ShareDomain"];
static string SharePassword = System.Configuration.ConfigurationManager.AppSettings["SharePassword"];
static string SharePhotoPath = System.Configuration.ConfigurationManager.AppSettings["SharePhotoPath"];
static string HelpUserName = System.Configuration.ConfigurationManager.AppSettings["HelpUserName"];
static string HelpDomain = System.Configuration.ConfigurationManager.AppSettings["HelpDomain"];
static string HelpPassword = System.Configuration.ConfigurationManager.AppSettings["HelpPassword"];
static string HelpFilePath = System.Configuration.ConfigurationManager.AppSettings["HelpFilePath"];
/// <summary>
/// 上传照片到共享文件夹
/// </summary>
/// <param name="UploadPhotoBase64">照片Base64数据</param>
/// <returns>照片保存路径</returns>
public static string UploadSharePhotos(string UploadPhotoBase64)
{
string RemarkImages = "";//照片存放短路径
IntPtr tokenHandle = new IntPtr(0);
IntPtr dupeTokenHandle = new IntPtr(0);
tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(ShareUserName, ShareDomain, SharePassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
if (returnValue == false)
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
WindowsIdentity newId = null;
WindowsImpersonationContext impersonatedUser = null;
using (newId = new WindowsIdentity(tokenHandle))
{
using (impersonatedUser = newId.Impersonate())
{//操作文档
string[] UploadPhotos = UploadPhotoBase64.Split('|');
string folderDate = DateTime.Now.ToString("yyyy_MM_dd");
string fullfileFolder = SharePhotoPath + "\\" + folderDate;
if (System.IO.Directory.Exists(fullfileFolder) == false)//如果不存在就创建文件夹
{
System.IO.Directory.CreateDirectory(fullfileFolder);
}
foreach (string ImagesBase in UploadPhotos)
{
byte[] imageBytes = Convert.FromBase64String(ImagesBase);
string fileName = DateTime.Now.ToString("yyyy_MM_dd_hh_mm_ss_ffffff") + ".jpeg";
string filePath = fullfileFolder + "\\" + fileName;
FileStream ms = new FileStream(filePath, FileMode.Create);
ms.Write(imageBytes, 0, imageBytes.Length);
ms.Flush();
ms.Close();
RemarkImages += folderDate + "\\" + fileName + "|";//记录文件路径
}
if (RemarkImages.Length > 0)
{
RemarkImages = RemarkImages.Substring(0, RemarkImages.Length - 1);//去除尾部分隔符 |
}
}
}
impersonatedUser.Undo();
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
return RemarkImages;
}
/// <summary>
/// 从共享文件夹读取图片数据信息
/// </summary>
/// <param name="PhotoPath"></param>
/// <returns></returns>
public static MemoryStream GetSharePhoto(string PhotoPath)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();//照片数据流
IntPtr tokenHandle = new IntPtr(0);
IntPtr dupeTokenHandle = new IntPtr(0);
tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(ShareUserName, ShareDomain, SharePassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
if (returnValue == false)
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
WindowsIdentity newId = null;
WindowsImpersonationContext impersonatedUser = null;
using (newId = new WindowsIdentity(tokenHandle))
{
using (impersonatedUser = newId.Impersonate())
{//操作文档
string fileFolder = System.Configuration.ConfigurationManager.AppSettings["SharePhotoPath"];
string filePath = fileFolder + "\\" + PhotoPath;//图片存放路径
if (System.IO.File.Exists(filePath))
{
Image Photo = Image.FromFile(filePath);
Photo.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
Photo.Dispose();
}
}
}
impersonatedUser.Undo();
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
return ms;
}
public static byte[] GetFile(string DownFileName)
{
byte[] DownloadFile = null;//要下载的文件的数据
IntPtr tokenHandle = new IntPtr(0);
IntPtr dupeTokenHandle = new IntPtr(0);
tokenHandle = IntPtr.Zero;
bool returnValue = LogonUser(HelpUserName, HelpDomain, HelpPassword, LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_DEFAULT, ref tokenHandle);
if (returnValue == false)
{
int ret = Marshal.GetLastWin32Error();
throw new System.ComponentModel.Win32Exception(ret);
}
WindowsIdentity newId = null;
WindowsImpersonationContext impersonatedUser = null;
using (newId = new WindowsIdentity(tokenHandle))
{
using (impersonatedUser = newId.Impersonate())
{//操作文档
string filePath = HelpFilePath + "\\" + DownFileName;//图片存放路径
DownloadFile = File.ReadAllBytes(filePath);//获取文件数据
}
}
impersonatedUser.Undo();
if (tokenHandle != IntPtr.Zero)
CloseHandle(tokenHandle);
return DownloadFile;
}
}
}
web.config
<appSettings>
<add key="SharePhotoPath" value="\\VMXP\Test"/>
<add key="ShareUserName" value="Guest"/>
<add key="SharePassword" value="123456"/>
<add key="ShareDomain" value="VMXP"/>
<add key="HelpFilePath" value="\\VMXP\Test"/>
<add key="HelpUserName" value="Guest"/>
<add key="HelpPassword" value="123456"/>
<add key="HelpDomain" value="VMXP"/>
</appSettings>