如何使用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 "文件传输成功!";
  }

 

上传文件至sharepoint

众所周知绝大多数OA办公软件都离不开他们的金牌合作伙伴à文件管理与上传!假如失去这位挚友,那它的功能也就大打折扣咯,更别说被企业得到友好,广泛的使用!而被大家熟悉的sharepoint也不例外哦!它的...
  • GaryTian55
  • GaryTian55
  • 2010年06月29日 11:28
  • 2547

sharepoint 2016 学习系列篇(21)-文档库应用篇-(3)在文档库中上传文档和下载文档

在文档库中,上传文档到文档库中,有一下几种方式: 第一种,通过文档库页面,点击上载: 点击“浏览”,选择需要上载的文件,点击确定 第二种,通过文档库页面,拖文档的方式上载: 在电脑...
  • cxx2325938
  • cxx2325938
  • 2016年07月22日 12:47
  • 1411

利用webservice(copy.asmx)为sharepoint上传文档要点

SharePoint对于文档库的操作有很多,但如果需要从非.NET环境的第三方系统操作SharePoint文档,可选项就不多了,常规做法是使用SharePoint提供的Webservice来操作。 ...
  • sundk911
  • sundk911
  • 2012年09月10日 14:57
  • 1083

由通过WebService上传附件给SharePoint的List时文件不能太大的问题说起…

     有个项目(Submition project)是利用Silverlight做个表单将数据提交到SharePoint的List里,表单除了填写一些信息外还可以上传附件,但遇到的问题是上传附件时...
  • sallay
  • sallay
  • 2008年12月18日 15:42
  • 7109

sharepoint 2013 如何创建一个webservice获取sharepoint列表数据

我们在做sharepoint 2013的项目开发过程中,有时候需要用到webservice,webservice的好处就是方便其它应用系统直接或间接地操作sharepoint的列表数据。下面我们通过一...
  • cxx2325938
  • cxx2325938
  • 2015年09月03日 12:18
  • 1090

WebService 实现文件的上传下载(非自动生成)

初入webservice的时候第一个接触的工具叫axis2,网上有着大量的简单案例。功能很强大,代码自动生成,能传递各种类型的数据。但是考虑到整合入公司项目的问题,决定去找一个不是自动生成手写的web...
  • kokoyuo
  • kokoyuo
  • 2016年07月27日 14:57
  • 1967

SharePoint 中利用WebService 进行文件操作的类

using System;using System.Web;using System.Web.Services;using System.Web.Services.Protocols;using Mi...
  • rmak2008
  • rmak2008
  • 2008年12月16日 14:30
  • 1448

webservice for sharepoint 2010

最近在研究webservice  for sharepoint ,记录一下 首先添加三个dll引用一个是System.ServiceModel 另一个是Microsoft.SharePoint.C...
  • li_shengwangso
  • li_shengwangso
  • 2012年02月20日 10:51
  • 2366

SharePoint 2013 搜索SharePoint 特定列和特定文档(自定义搜索)

SharePoint 2013 搜索SharePoint 特定列和特定文档 1,操作步骤和图例,因语言和版本的不同 我尽量使用抓图方式。 2.  In Central Administration...
  • jason_dct
  • jason_dct
  • 2015年03月17日 10:27
  • 1608

SharePoint 2013 开发文档管理字段小记

前言   最近有这样一个需求,就是要求在列表库里管理文档,需要多文档管理、带版本控制、可以单独授权等基本操作。于是乎,就开发了一个自定义段,这里介绍一下字段的思路,里面有一些遇到的问题,在群友的帮助...
  • linyustar
  • linyustar
  • 2016年01月28日 11:27
  • 1591
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何使用WebService上传文件至SharePoint 文档库中(已解决)
举报原因:
原因补充:

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