当我从带有WebClient的VSTS下载包含'Drawing Canvas'的.docx文件时,下载的.docx文件已损坏 . 当我说破了,我的意思是我们无法手动打开Word文档,我们有下一条错误消息:“文件已损坏,无法打开” .
只有当word文件包含canvas并且从VSTS下载时才会发生这种情况?如果我从TFS2017下载或.docx文件不包含Canvas而不是一切正常 .
首先,我认为该问题与编码有关,所以我测试了我在WebClient中找到的所有编码 . 进行与编码相关的任何更改都无法解决当前问题 .
此外,我试图改变实现方式,我们不使用方法DownloadFile而不是那个,我下载了字节数组并基于字节生成的Word文档 . 随着实施的这种变化,我们遇到了与以前相同的问题 .
这是代码示例:
static void Main(string[] args)
{
var tfsUri = new Uri("https://.../");
var projectCollection = TfsTeamProjectCollectionFactory.GetTeamProjectCollection(tfsUri);
var workItemStore = projectCollection.GetService<WorkItemStore>();
var workItem = workItemStore.GetWorkItem(2);
projectCollection.EnsureAuthenticated();
var credentials = workItemStore.TeamProjectCollection.Credentials;
var fileName = "D:\\test_folder\\files\\System.Description.docx";
var uri = workItem.Attachments[0].Uri;
using (var request = new WebClient() { Credentials = credentials })
{
request.DownloadFile(uri, fileName);
}
}
如果您有任何想法,感谢您的帮助 .
1 回答
此问题不是由docx文件中的画布引起的 . 如果您使用代码从VSTS下载文件,即使docx文件中只有文本,该文件也应该被破坏 .
这里的问题是VSTS的身份验证与TFS不同,因此WebClient下载文件请求实际上在下载文件时获得401,因为它没有下载文件所需的权限 . 将代码更新为以下内容,然后重试: