如何把文件上传到另外一台服务器2

来源:互联网 发布:日本人生活方式 知乎 编辑:程序博客网 时间:2024/05/14 10:13

将文件上传到网络共享服务器的方法


1,在文件服务器上,创建一个本地帐户,比如登录名:upload,密码:upload,注意在创建的时候选择“密码永不过期”,去掉勾选“用户下次登录时须更改密码”的选项;
 2,在要共享的文件夹上点右键,选择“属性”-“安全”,增加upload帐户可以写入的权限;
 3,在要共享的文件夹上点右键,选择“共享”,共享此文件夹,并在“权限”按钮点击后添加帐户upload可修改;
 4,在另外一台 Web 服务器上,创建登录名和密码与上面完全相同的本地帐户。
 5,在web.config里,启用模拟:      
 

web.config里添加的代码
 

< identity impersonate="true" userName="upload" password="upload" />
 
6,在网站文件夹和Temporary ASP.NET Files文件夹上设置帐户upload读写权限
 7,在ASP.NET的上传文件里写:
 

C# 代码
 

protected void Button1_Click(object sender, EventArgs e)
 {
   string fileName = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
   FileUpload1.SaveAs(@"\\192.168.3.1\free\" + fileName);
 }
 

8,显示上传的文件:
 在IIS里创建虚拟目录,指向“另一台计算机上的共享”,“连接为”输入上面创建的帐户名和密码。即可以http://www.mengxianhui.com/upload/hello.jpg进行访问。
 
注意:在VS里面直接运行可能会报告
 Could not load file or assembly 'WebApplication1' or one of its dependencies. 拒绝访问。
 这是因为你模拟的帐户没有权限导致的,你可以发布到IIS看效果。
 
 下面是一段使用程序进行模拟的方法,出自 http://2leggedspider.wordpress.com/2007/05/28/upload-files-to-unc-share-using-asp-net/ :
 

C# 代码
 


using System.Security.Principal;
 using System.Runtime.InteropServices;
 
namespace FileUploadUNCShare
 {
     public partial class _Default : System.Web.UI.Page
     {
 
        public const int LOGON32_LOGON_INTERACTIVE = 2;
         public const int LOGON32_PROVIDER_DEFAULT = 0;
 
        WindowsImpersonationContext impersonationContext;
 
        [DllImport("advapi32.dll")]
         public static extern int LogonUserA(String lpszUserName,
             String lpszDomain,
             String lpszPassword,
             int dwLogonType,
             int dwLogonProvider,
             ref IntPtr phToken);
         [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
         public static extern int DuplicateToken(IntPtr hToken,
             int impersonationLevel,
             ref IntPtr hNewToken);
 
        [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
         public static extern bool RevertToSelf();
 
        [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
         public static extern bool CloseHandle(IntPtr handle);
 
        private bool ImpersonateUser(String userName, String domain, String password)
         {
             WindowsIdentity tempWindowsIdentity;
             IntPtr token = IntPtr.Zero;
             IntPtr tokenDuplicate = IntPtr.Zero;
 
            if (RevertToSelf())
             {
                 if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
                     LOGON32_PROVIDER_DEFAULT, ref token) != 0)
                 {
                     if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                     {
                         tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                         impersonationContext = tempWindowsIdentity.Impersonate();
                         if (impersonationContext != null)
                         {
                             CloseHandle(token);
                             CloseHandle(tokenDuplicate);
                             return true;
                         }
                     }
                 }
             }
             if (token != IntPtr.Zero)
                 CloseHandle(token);
             if (tokenDuplicate != IntPtr.Zero)
                 CloseHandle(tokenDuplicate);
             return false;
         }
 
        private void UndoImpersonation()
         {
             impersonationContext.Undo();
         }
 
        protected void Page_Load(object sender, EventArgs e)
         {
 
        }
 
        protected void Button1_Click(object sender, EventArgs e)
         {
             if (ImpersonateUser("upload", "", "upload"))
             {
 
                if ((FileUpload1.PostedFile != null) && (FileUpload1.PostedFile.ContentLength &gt; 0))
                 {
                     string fileName = System.IO.Path.GetFileName(FileUpload1.PostedFile.FileName);
                     string folderPath = @"\\MyUNCShare\MyFolder\";
 
                    string locationToSave = folderPath + "\\" + fileName;
                     try
                     {
                         FileUpload1.PostedFile.SaveAs(locationToSave);
                         Response.Write("The file has been uploaded.");
                     }
                     catch (Exception ex)
                     {
                         Response.Write("Error: " + ex.Message);
                     }
                 }
                 else
                 {
                     Response.Write("Please select a file to upload.");
                 }
 
                UndoImpersonation();
             }
             else
             {
                 Response.Write("Failed");
             }
 
        }
     }
 }
  
0 0
原创粉丝点击