• [Asp.net]通过uploadify将文件上传到B服务器的共享文件夹中


    写在前面

    客户有这样的一个需求,针对项目中文档共享的模块,客户提出如果用户上传特别的大,或者时间久了硬盘空间就会吃满,能不能将这些文件上传到其他的服务器?然后就稍微研究了下这方面的东西,上传到网络中的某个共享的文件夹下确实能做到的。

    解决方案

    环境描述:

    若A为web服务器,B为要存放文档的文件服务器。

    如果通过A中的某个页面将文件上传到服务器B,则需要如下三个步骤。

    1、在服务器B上面建立共享文件夹,步骤如下:

     

    编辑贡献文件夹的权限,添加一个用户,并给它开放读写的权限。

    2.共享文件夹建立之后,假如文件服务器B的IP地址为:192.168.83.123,可通过运行访问该文件夹是否共享成功。

     

    3、简单测试,可以使用Uploadify进行上传测试。

    关于uploadify的使用就不再做介绍了

    修改UploadHander.ashx一般处理程序,核心代码如下:

     1   /// <summary>
     2         /// 处理请求的方法
     3         /// </summary>
     4         /// <param name="context">http上下文</param>
     5         public void ProcessRequest(HttpContext context)
     6         {
     7             //获取或设置输出流的HTTP MIME类型
     8             context.Response.ContentType = "text/plain";
     9             //获取上传的文件
    10             HttpPostedFile httpPostedFile = context.Request.Files["Filedata"];
    11             //如果接收到文件则httpPostedFile不为null,则对上传的文件进行处理,否则向客户端返回0
    12             if (httpPostedFile != null)
    13             {
    14 
    15                 //获取文件名
    16                 string strfileName = httpPostedFile.FileName;
    17 
    18                 //获取扩展名
    19                 string strExt = Path.GetExtension(strfileName);
    20 
    21                 //允许上传的文件类型
    22                 string[] strExts = { ".jpg", ".png", ".gif", ".zip", ".rar" };
    23 
    24                 //如果上传的文件类型,在被允许的类型中,则保存,否则向客户端输出“不允许上传”的信息提示。
    25                 if (strExts.Contains(strExt))
    26                 {
    27                     //上传目录
    28                     DirectoryInfo theFolder = new DirectoryInfo(@"\192.168.83.123upload");    
    29                     //定义新的文件名,格式:“201404210323146909_文件名.zip”
    30                     string strNewName = DateTime.Now.ToString("yyyyMMddhhmmssffff") + "_" + strfileName;
    31                     string path = Path.Combine(theFolder.FullName, strNewName);
    32                     //保存文件到文件服务器
    33                     httpPostedFile.SaveAs(path);
    34                     //将文件的保存的相对路径输出到客户端
    35                     context.Response.Write(path);
    36                 }
    37                 else
    38                 {
    39                     context.Response.Write("不允许上传");
    40                 }
    41             }
    42             else
    43             {
    44                 //没有文件,向客户端输出0
    45                 context.Response.Write("0");
    46             }
    47         }

     4、在全局处理程序Global.asax.cs中添加如下代码,应用程序启动时,创建访问文件服务器B的凭证。

    核心代码如下:

    1   protected void Application_Start(object sender, EventArgs e)
    2         {
    3             //System.Diagnostics.Process.Start("net.exe", "use \\B服务器的IP\共享文件夹 "B服务器上的密码" /user:"B服务器上的用户名""), 
    4             System.Diagnostics.Process.Start("net.exe", "use \\192.168.83.123\upload "123456" /user:"xxxdev\dev"");
    5         }

    这就话的意思是,在应用程序已启动的时候,就为访问B服务器提供凭证。

    将网站部署到iis上,如果发现上传不成功,可尝试为共享文件夹添加Everyone,并给与完全控制权限。

    总结

    当时弄这个,确实花了点功夫来配置共享文件夹的权限,也花了不少时间,就想着还是记录一下,希望能帮到你!

  • 相关阅读:
    LeetCode 282. Expression Add Operators (Hard,递归分治)
    LeetCode 279. Perfect Squares
    LeetCode 278. First Bad Version
    LeetCode 275. H-Index II
    工作笔记——使用Jest时遇到的一些问题
    RFC2616-HTTP1.1-Header Field Definitions(头字段规定部分—译文)
    RFC2616-HTTP1.1-Status Code(状态码规定部分—译文)
    RFC2616-HTTP1.1-Methods(方法规定部分—译文)
    RFC2616-HTTP1.1-Status Code(状态码规定部分—单词注释版)
    RFC2616-HTTP1.1-Methods(方法规定部分—单词注释版)
  • 原文地址:https://www.cnblogs.com/wolf-sun/p/4198238.html
Copyright © 2020-2023  润新知