【问题标题】:Sharepoint File Upload共享点文件上传
【发布时间】:2010-08-16 18:36:47
【问题描述】:

我有一个 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 .. 例如。域\用户名。

【问题讨论】:

  • 您遇到的错误是什么?
  • 我没有收到任何错误。我试着上传它。我收到 CopyIntoItems 的结果为 0(不是 CopyResult)。但我没有在网站上看到它。我什至尝试使用 Explorer View 来查找文件。

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


【解决方案1】:

这是我过去使用 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 代理是使用旧式 Add Web Reference 而不是较新的 Add Service Reference 生成的。我发现在使用旧的 ASMX SharePoint Web 服务时使用旧的代理更容易。

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

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

【讨论】:

  • 。感谢您的回复。我在 Silverlight 应用程序中使用它。所以我需要异步执行,我需要为 ClientCredentials 设置值。我不认为我可以这样做。即使我使用 WebService 以这种方式执行此操作,但通过设置 NetworkCredentials 并同步执行,我怀疑它是否会在另一台机器上的站点上运行,因为我正在使用 WebService 实现它。
【解决方案2】:

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

copy.ClientCredentials.Windows.ClientCredential.Domain.

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

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

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

如果我能在没有这种解决方法的情况下获得解决方案。将不胜感激。

再次感谢华莱士的关注。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2019-11-14
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-06-12
    相关资源
    最近更新 更多