如何使用WebService上传文件至SharePoint 文档库中(已解决)

原创 2006年06月19日 16:12:00

问题描述: 通过WebService的形式将文件上传至SharePoint的文档库,我认为有2个难点,其中比较好解决的是文件传输,这个文件传输有好多种办法,比如使用ftp协议.最难的一个可能就是权限问题.(原来我的解决方法是正确的,只是模拟用户的时候域名写的不对,哈哈,)

我想会有好多人也会遇到这个问题,我的这个解决方法,在一定程度上可以解决一些问题.(^_^),关于身份模拟请参考msdn中的描述。此程序片段不包含目录验证的代码.

这个问题困扰了我好久.我曾经尝试过多种方法.但一样的程序,在windows应用程序里运行就ok,一放到webservice里就出问题了.(不过今天晚上又测试了多次,证明我的方法是有效的,兴奋中....)

以下是通过文件监控的方式实现的文件上传程序代码:(里面采用了模拟windows用户的方式模拟当前的操作用户)

  private void fileSystemWatcher1_Created(object sender, System.IO.FileSystemEventArgs e)
  {  
   Application.DoEvents();
   WindowsImpersonationContext wic = null;   
   if( wic != null ) wic.Undo();
   try
   {     
    System.IO.File.Copy(e.FullPath,"c://AresTemp//"+e.Name,true);

    FileStream fStream;    
    fStream= File.OpenRead("c://AresTemp//"+e.Name);   
    byte[] contents = new byte[fStream.Length];    
    fStream.Read(contents, 0, (int)fStream.Length); 
    fStream.Close();
    if(File.Exists("c://AresTemp//"+e.Name)==true)
    {
     File.Delete("c://AresTemp//"+e.Name);
    }         
    
    wic =SPUtil.GetWindowsIdentity();
    SPWeb myweb=new SPSite(SharePointURL).OpenWeb();
    myweb.AllowUnsafeUpdates=true;
    
    myweb.Files.Add(SharePointURL+"/"+e.Name,contents,true);
//    if (File.Exists(e.FullPath))
//     File.Delete(e.FullPath); 
    if( wic != null ) wic.Undo(); 
    AresLog.recordLog("文件上传成功","","",e.Name  ,e.FullPath);
    
   }
   catch(Exception ee)
   {
    if( wic != null ) wic.Undo();
    AresLog.recordLog("上传文件异常","","",ee.Message,ee.StackTrace);
   }
  }

以下是我写的通过ftp的方式,将文件传输到本地,然后读取本地磁盘文件,上传到sharpoint文档库的代码:(需要注意域名的书写,此代码已经过本机测试成功,但具体环境不同,也可能造成一定的差异)

 [WebMethod]
  public string UpLoadFilesToSPS(string FtpServer,string FtpUser,string FtpPwd,string FtpPath,string FilesName,string FilesInfo,string targetUrl)
  {
   //ftp settings
   FtpClient myFTP=new FtpClient();
   myFTP.Server=FtpServer;
   myFTP.Username=FtpUser;
   myFTP.Password=FtpPwd;
   myFTP.RemotePath=FtpPath;
   //filePath,info
   string[] fName=Microsoft.VisualBasic.Strings.Split(FilesName,";",-1,Microsoft.VisualBasic.CompareMethod.Text);
   string[] fInfo=Microsoft.VisualBasic.Strings.Split(FilesInfo,";",-1,Microsoft.VisualBasic.CompareMethod.Text);
   int i=0;
   //检查和创建本地环境
   if(Directory.Exists("C://AresTemp")==false)
   {
    Directory.CreateDirectory("C://AresTemp");
   }
   foreach(string fDirectory in fInfo)
   {
    if(Directory.Exists("C://AresTemp//"+fDirectory)==false)
    {
     Directory.CreateDirectory("C://AresTemp//"+fDirectory);
    }
   }
   //文件下载
   for(i=0;i<fName.Length;i++)
   {
    myFTP.DownloadEx(fName[i],"C://AresTemp//"+fInfo[i]+"//"+fName[i],true);
   }
   myFTP.Close();
  WindowsImpersonationContext wic = null; 
   
   if( wic != null ) wic.Undo();
   //获取模拟用户信息
   ZSoft.WindowsImpersonation.WIUser myUser=new ZSoft.WindowsImpersonation.WIUser(ServerUser,ServerName,ServerPassword);
   myUser.impersonateValidUser();
   wic =myUser.wic;
   SPWeb myweb=new SPSite(targetUrl).OpenWeb();
   myweb.AllowUnsafeUpdates=true; 

   for(i=0;i<fName.Length;i++)
   { 
    FileStream fStream;    
    fStream= File.OpenRead("c://AresTemp//"+fInfo[i]+"//"+fName[i]);   
    byte[] contents = new byte[fStream.Length];    
    fStream.Read(contents, 0, (int)fStream.Length); 
    fStream.Close();       
    myweb.Files.Add(targetUrl+"/"+fInfo[i]+"//"+fName[i],contents,true);  
   }
   myweb.Close();
   if( wic != null ) wic.Undo();
   return "文件传输成功!";
  }

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

phpstorm webstorm 分支 和上传分支

在上一篇的基础上继续 1.找到当前的分支,右下角处能看到当前操作的分支,以及其他分支 2.在原来分支的基础上创建新的分支 点击后,弹窗新窗口要求填写新分支的名字,避免出现问题 请不要使用中...

PHP底层工作原理

最近搭建服务器,突然感觉lamp之间到底是怎么工作的,或者是怎么联系起来?平时只是写程序,重来没有思考过他们之间的工作原理: PHP底层工作原理 图1 php结构 从图上可以看出,php从下...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

使用C#利用Http协议从远端向SharePoint文档库上传文件

概述:在程序中如何向SharePoint文档库上传文件是最普通的编程任务,实起来,有2种方式:一、这项功能实现起来最方便的就是利用服务器OM,在程序中直接引用SharePoint.dll,里面有很多关...

sharepoint2010上传文档报文件过大的解决方案

How To Change The maximum file size Upload in SharePoint 2010   This morning I tried to upload ...

C#代码上传文件到SharePoint文档库并给字段赋值

C#代码上传文件到SharePoint文档库并给字段赋值 在SharePoint产品的各个版本中,文档库一直都是一项重要的存储容器,用来存储大量的文件而设置的。在SharePoint 2010版...

用WebClinet实现SharePoint上文档库中文件的上传与下载

微软的SharePoint 提供了强大的文档管理功能,能够创建各种类型的文档库,并对文档进行相应的管理。所以我们的产品也打算将文件用SharePoint来管理,实现文档的共享访问。于是,就产生了用客户...

SharePoint web service 上传文件至文件库

下面讲解的是利用sharepoint 自带的web service服务将文件上传至sharepoint站点的文件库,本机上可以不安装sharepoint 实现文件上传需要两个服务:        ...

使用WebService实现文件上传

使用WebService实现文件上传        使用WebService实现文件上传,具体方法如下:               //文件引用     &#...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)