服务器事件更改了Sharepoint上传的文件名.如何找回它

本文关键字:文件名 何找回 事件 Sharepoint 服务器 | 更新日期: 2023-09-27 18:15:37

我正在使用以下代码上传文件到Sharepoint服务器:

ClientOM.File uploadFile = null;
try {
    string fileRef = serverRelativeURL + msg.Message.FileName;
    FileCreationInformation fileCreationInformation = new FileCreationInformation() {
        Content = msg.Content,
        Url = fileRef,
        Overwrite = true
};
uploadFile = _currentList.RootFolder.Files.Add(fileCreationInformation);
_currentContext.ExecuteQuery();

和文件上传。但在服务器上,我们有一个事件,将一些随机字符串添加到文件标题。所以fileRef在上传后是不相关的。

我们需要设置文件的Author。为此,我们必须检索文件并更新此属性。我使用下面的示例:

string fileName = serverRelativeURL + msg.Message.FileName;
uploadFile = _currentContext.Web.GetFileByServerRelativeUrl(fileName);
_currentContext.Load(uploadFile);
uploadFile.ListItemAllFields["Author"] = _currentUser;
uploadFile.ListItemAllFields["Editor"] = _currentUser;
uploadFile.ListItemAllFields.Update();
_currentContext.ExecuteQuery();

和ExecuteQuery()我得到一个异常"文件未找到"。但是如果我从Sharepoint复制路径(随机字符串),一切工作正常。

所以问题是:有没有其他的方法来检索文件?比如通过id ?因为当我们上传文件时,实例"uploadFile"并没有太多有用的信息

服务器事件更改了Sharepoint上传的文件名.如何找回它

方法一:跟踪文件名,然后使用此代码直接检索它。

    public FileInformation GetFileFromAttachment(int itemId, string filename)
    {
        FileInformation file = null;
        //continue here
        if (new FileInfo(filename).Name != null)
        {
            CSOMUtils.ExecuteInNewContext(QueryConfig.siteUrl, delegate(ClientContext clientContext)
            {
                clientContext.Credentials = QueryConfig.credentials;
                clientContext.Load(clientContext.Web, l => l.ServerRelativeUrl);
                clientContext.ExecuteQuery();

                List oList = clientContext.Web.Lists.GetByTitle(ListName);
                clientContext.ExecuteQuery();
                string url = string.Format("{0}/Lists/{1}/Attachments/{2}/{3}",
                    clientContext.Web.ServerRelativeUrl,
                    ListName,
                    itemId,
                    filename);
                var f = clientContext.Web.GetFileByServerRelativeUrl(url);
                clientContext.Load(f);
                clientContext.ExecuteQuery();
                file = File.OpenBinaryDirect(clientContext, f.ServerRelativeUrl);

            });
        }
        return file;
    }
方法2:

您可以使用ServerRelativeUrl来获取包含所有附件的文件夹。https://msdn.microsoft.com/library/office/microsoft.sharepoint.client.folder.serverrelativeurl.aspxhttps://sharepoint.stackexchange.com/questions/132008/reliably-get-attachments-for-list-item