您的位置:首页 > 其它

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

2015-09-08 10:09 513 查看

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

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 > 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");

             }

 

        }

     }

 }

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: