Sharepoint文件上传

时间:2010-08-16 18:36:47

标签: c# sharepoint sharepoint-2007 silverlight-4.0

我有一个Silverlight应用程序,它将文件上传到Sharepoint站点。我让它在我的盒子里的Sharepoint站点和别人的盒子里的Sharepoint站点上工作,我在那里使用我的Windows帐户登录该站点。但是我无法将文件上传到位于不同域中的Sharepoint站点/使用不同的登录名。

将文件上传到不使用我帐户的网站。我用它来获取凭据并更改端点

CopySoapClient copy = new CopySoapClient();
copy.ClientCredentials.UserName.UserName = obj.UserName;
copy.ClientCredentials.UserName.Password = obj.Password;
copy.Endpoint.Address = new System.ServiceModel.EndpointAddress(newMaster.Url + "/_vti_bin/Copy.asmx");
copy.Endpoint.Contract.Name = "CopyReference.CopySoap";
copy.Endpoint.Binding.Name = "basicHttpBinding";
copy.Endpoint.Contract.ConfigurationName = "CopySoap";

其中obj.UserName也具有DomainName ..例如。域\用户名。

2 个答案:

答案 0 :(得分:4)

以下是我过去使用SharePoint Web服务SDK将文档上传到SharePoint文档库的代码片段。

var copyClient = new Copy();
copyClient .Credentials = credentials; // <-- Create Network Credentials

var siteUrl = "http://....";
var libraryName = "MyDocLibrary";
var localFilePath = "...";
var fileName = Path.GetFileName(localFilePath);
var destinationUrl = string.Format("{0}/{1}/{2}", siteUrl, libraryName, fileName);

var fileBytes = File.ReadAllBytes(localFilePath);
var info = new[]{new FieldInformation
                        {
                            DisplayName = fileName,
                            Id = Guid.NewGuid(),
                            InternalName = fileName,
                            Type = FieldType.File,
                            Value = fileName
                        }};

CopyResult[] results;
copyClient.CopyIntoItems(destinationUrl, new[] { destinationUrl }, info, fileBytes, out results);

仅供参考 - 此Copy代理是使用旧学校添加网络参考而非较新的添加服务参考生成的。在使用旧的ASMX SharePoint Web服务时,我发现使用旧的学校代理更容易。

如果您需要动态更改端点网址,则可以在调用CopyIntoItems()方法之前使用以下内容。

var copyServiceUrl = string.Concat(siteUrl, "/_vti_bin/Copy.asmx");
copyClient.Url = copyServiceUrl;

答案 1 :(得分:0)

我实际上以不同的方式工作。当我使用WebBrowser控件导航到我想上传的sharepoint文档库/文件夹位置时,我发现该网站未经过真正的身份验证。由于我使用Silverlight,我无法使用它,

copy.ClientCredentials.Windows.ClientCredential.Domain.

我可以在ASP.Net应用程序中使用它来上传文件。

因此,我手动提示用户在WebBrowser控件中输入凭据。现在一切正常。问题是我无法通过域传递凭据,或者无法从Silverlight指定域。

PS:我有客户端访问策略和跨域。所以它与此无关。 (据我所知)。

如果没有这种解决方法,我可以获得解决方案。非常感谢。

再次感谢Wallace的兴趣。