获取刚刚流式传输到 SharePoint 文档文件夹的文件的 ID

Get the ID of file just streamed to SharePoint Document Folder

请阅读此post的底部,因为问题已被修改。



我已经成功地从我的计算机中取出文件并将其发送到 SharePoint 中的文档库。但是,文档中的 "Title" 列是空白的。我想将 "Title" 列设置为某个值,但不确定如何去做。

这是我用来上传文件的代码

    public static async Task PutFileAsync()
    {
        string genName = App.Generator;
        genName = genName.Replace(" ", "-");
        StorageLibrary videoLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
        string readFolder = videoLibrary.SaveFolder.Path;
        StorageFolder videoFolder = await StorageFolder.GetFolderFromPathAsync(readFolder);
        string readFileName = App.Date + "-" + App.StartTime + "-" + App.IBX + "-" + genName + ".xlsx";
        StorageFile readFile = await videoFolder.GetFileAsync(readFileName);
        byte[] result;
        using (Stream stream = await readFile.OpenStreamForReadAsync())
        {
            using (var memoryStream = new MemoryStream())
            {
                stream.CopyTo(memoryStream);
                result = memoryStream.ToArray();
            }
        }
        var (authResult, message) = await Authentication.AquireTokenAsync();
        var httpClient = new HttpClient();
        HttpResponseMessage response;
        string posturl = MainPage.spfileurl + readFile.Name + ":/content";
        var request = new HttpRequestMessage(HttpMethod.Put, posturl);
        request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
        request.Content = new ByteArrayContent(result);
        response = await httpClient.SendAsync(request);
        var responseString = await response.Content.ReadAsStringAsync();

        await Task.Run(() =>
        {
            File.Delete(readFile.Path);
            return TaskStatus.RanToCompletion;
        });
    }

有什么建议就太好了!

谢谢!

其他信息

public static string rooturl = "https://graph.microsoft.com/v1.0/sites/mycompanyinc.sharepoint.com,495435b4-60c3-49b7-8f6e-1d262a120ae5,0fad9f67-35a8-4c0b-892e-113084058c0a/";

string submiturl = rooturl + "lists/18a725ac-83ef-48fb-a5cb-950ca2378fd0/items";

public static string spfileurl = rooturl + "drive/root:/Generator_Runs/";

public static string fileurl = rooturl + "lists/edd49389-7edb-41db-80bd-c8493234eafa/drive/items/01JDP7KXPY64K4C3P4YJC2CJ2IUFG7DAP7/content";


由于上传时无法添加列数据,我需要弄清楚我刚刚上传的文件的listitem ID是什么。

这是提交后的responseString

[JSON]
    @odata.context: "https://graph.microsoft.com/v1.0/$metadata#sites('mycompanyinc.sharepoint.com%2C495435b4-60c3-49b7-8f6e-1d262a120ae5%2C0fad9f67-35a8-4c0b-892e-113084058c0a')/drive/root/$entity"
    @microsoft.graph.downloadUrl: "https://mycompanyinc.sharepoint.com/sites/GeneratorApp/_layouts/15/download.aspx?UniqueId=...&ApiVersion=2.0"
    createdDateTime: "12/29/2018 6:43:00 PM"
    eTag: ""{BB51689A-9FF5-412C-8B45-D01D2B61A789},2""
    id: "01JDP7KXM2NBI3X5M7FRAYWROQDUVWDJ4J"
    lastModifiedDateTime: "12/29/2018 6:43:00 PM"
    name: "FileNameJ.xlsx"
    webUrl: "https://mycompanyinc.sharepoint.com/sites/GeneratorApp/_layouts/15/Doc.aspx?sourcedoc=%7BBB51689A-9FF5-412C-8B45-D01D2B61A789%7D&file=FileName.xlsx&action=default&mobileredirect=true"
    cTag: ""c:{BB51689A-9FF5-412C-8B45-D01D2B61A789},4""
    size: 47079
    createdBy
    lastModifiedBy
    parentReference
    file
    fileSystemInfo

好的,这需要大量的反复试验。我必须创建另一个 class 才能解析数据:

public class SharePointDocumentNew
{
    public class RootObject
    {
        public string eTag { get; set; }
        public string id { get; set; }
        public string name { get; set; }
        public string webUrl { get; set; }
    }
}

AND

public class SharePointDocumentItems
{
    public class Value
    {
        [JsonProperty("@odata.etag")]
        public string OdataEtag { get; set; }

        public string ETag { get; set; }
        public string Id { get; set; }
        public string WebUrl { get; set; }
    }

    public class RootObject
    {
        [JsonProperty("@odata.context")]
        public string OdataContext { get; set; }

        public List<Value> value { get; set; }
    }
}

然后我找到了两者之间的匹配数据,并使用REGEX来获取匹配数据,代码如下:

public static async Task PutFileAsync()
{
    List<SharePointListItems.Lookup> Lookups = new List<SharePointListItems.Lookup>();
    string genName = App.Generator;
    genName = genName.Replace(" ", "-");
    StorageLibrary videoLibrary = await StorageLibrary.GetLibraryAsync(KnownLibraryId.Videos);
    string readFolder = videoLibrary.SaveFolder.Path;
    StorageFolder videoFolder = await StorageFolder.GetFolderFromPathAsync(readFolder);
    string readFileName = App.Date + "-" + App.StartTime + "-" + App.IBX + "-" + genName + ".xlsx";
    StorageFile readFile = await videoFolder.GetFileAsync(readFileName);
    byte[] result;
    using (Stream stream = await readFile.OpenStreamForReadAsync())
    {
        using (var memoryStream = new MemoryStream())
        {
            stream.CopyTo(memoryStream);
            result = memoryStream.ToArray();
        }
    }
    var (authResult, message) = await Authentication.AquireTokenAsync();
    var httpClient = new HttpClient();
    HttpResponseMessage response;
    string posturl = MainPage.spfileurl + readFile.Name + ":/content";
    var request = new HttpRequestMessage(HttpMethod.Put, posturl);
    request.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult.AccessToken);
    request.Content = new ByteArrayContent(result);
    response = await httpClient.SendAsync(request);
    var responseString = await response.Content.ReadAsStringAsync();
    JObject json = JObject.Parse(responseString);
    var result3 = JsonConvert.DeserializeObject<SharePointDocumentNew.RootObject>(responseString);
    eTag = result3.eTag.ToString();
    eTag = eTag.Replace("\"{", "");
    string replacement = "";
    string endPattern = "}.*";
    Regex rgxend = new Regex(endPattern);
    eTag = rgxend.Replace(eTag, replacement);
    eTag = Regex.Replace(eTag, @"[A-Z]+?", m => m.ToString().ToLower());

    await Task.Run(() =>
    {
        File.Delete(readFile.Path);
        return TaskStatus.RanToCompletion;
    });
}

public static async Task GetFileDataAsync()
{
    List<SharePointDocumentItems.Value> Value2 = new List<SharePointDocumentItems.Value>();
    var (authResult2, message2) = await Authentication.AquireTokenAsync();
    var httpClient2 = new HttpClient();
    HttpResponseMessage response2;
    string geturl = "https://graph.microsoft.com/v1.0/sites/mycoinc.sharepoint.com,495435b4-60c3-49b7-8f6e-1d262a120ae5,0fad9f67-35a8-4c0b-892e-113084058c0a/lists/edd49389-7edb-41db-80bd-c8493234eafa/items";
    var request2 = new HttpRequestMessage(HttpMethod.Get, geturl);
    request2.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", authResult2.AccessToken);
    response2 = await httpClient2.SendAsync(request2);
    var responseString2 = await response2.Content.ReadAsStringAsync();
    JObject json2 = JObject.Parse(responseString2);
    var result2 = JsonConvert.DeserializeObject<SharePointDocumentItems.RootObject>(responseString2);
    foreach (var d in result2.value)
    {
        string ETAG = d.ETag;
        string startPattern = "^\\"";
        string replacement = "";
        string endPattern = ",.*";
        Regex rgxstart = new Regex(startPattern);
        ETAG = rgxstart.Replace(ETAG, replacement);
        Regex rgxend = new Regex(endPattern);
        ETAG = rgxend.Replace(ETAG, replacement);
        if (ETAG == eTag)
        {
            fileID = d.Id;
        }
    }
}

现在我有了更新与该文件关联的其他列所需的 ID。