Как загрузить (несколько) файлов в SharePoint Online с помощью CSOM? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть веб-форма, которая загружает некоторые введенные данные в список SharePoint как новый элемент списка, который работает хорошо.Я попытался добавить новый код для загрузки двух файлов через два отдельных элемента управления <asp:FileUpload>.Следующий код в protected void sendToSharePoint() {} не работает для загрузки любого файла в указанную библиотеку документов SharePoint, не говоря уже о:

Default.aspx:

//Existing code

<asp:FileUpload ID="upldGradeReport" runat="server" />
<asp:FileUpload ID="upldExpenseReceipt" runat="server" />

<asp:Button ID="btnSubmitForm" OnClick="SubmitButton_Click" runat="server" Text="Submit" />

Default.aspx.cs:

using System;
using System.DirectoryServices;
using System.IO;
using System.Security;
using System.Web.UI;
using Microsoft.SharePoint.Client;
using ClientOM = Microsoft.SharePoint.Client;

//I left out the NameSpace and default public partial class wrapper, but they're here.

public ClientContext SPClientContext { get; set; }
public string SPErrorMsg { get; set; }

protected void SubmitButton_Click(object sender, EventArgs e) {
    sendToSharePoint();
    Response.BufferOutput = true;
    Response.Redirect("Submission.aspx");
}

protected void sendToSharePoint() {

    try {
        string siteUrl = "<sharepoint site url>";

        ClientContext clientContext = new ClientContext(siteUrl);
        clientContext.Credentials = new SharePointOnlineCredentials("<my username>", "<my password>");

        string sDocName = string.Empty;
        string sDocName1 = string.Empty;
        Uri uri = new Uri(siteUrl);
        string sSPSiteRelativeURL = uri.AbsolutePath;
        sDocName = UploadFile(upldGradeReport.FileContent, upldGradeReport.FileName, sSPSiteRelativeURL, "<sharepoint document library>");
        sDocName1 = UploadFile(upldExpenseReceipt.FileContent, upldExpenseReceipt.FileName, sSPSiteRelativeURL, "<sharepoint document library>");

        //prior CSOM code to insert values into a new List Item exists here

        clientContext.ExecuteQuery();
    } catch (Exception ex) {
        String ThisError = ex.Message;
    }
}

public String UploadFile(Stream fs, string sFileName, string sSPSiteRelativeURL, string sLibraryName) {
    string sDocName = string.Empty;
    try {
        var sFileURL = String.Format("{0}/{1}/{2}", sSPSiteRelativeURL, sLibraryName, sFileName);
        ClientOM.File.SaveBinaryDirect(SPClientContext, sFileURL, fs, true);
        sDocName = sFileName;
    } catch (Exception ex) {
        sDocName = string.Empty;
        SPErrorMsg = ex.Message;
    }
    return sDocName;
}

Код, который создает новый элемент ListItem и загружает оставшиеся введенные в форму данные в отдельный список SharePoint, по-прежнему работает после отправки, и я подтвердил, что учетные данные верны и учетная запись являетсяused имеет права на загрузку файлов в библиотеку документов.

Что я делаю не так?

1 Ответ

1 голос
/ 10 апреля 2019

Я протестировал приведенный ниже код в моей локальной среде; работает нормально.

<div>
    <asp:FileUpload ID="upldGradeReport" runat="server" />
    <asp:FileUpload ID="upldExpenseReceipt" runat="server" />

    <asp:Button ID="btnSubmitForm" OnClick="SubmitButton_Click" runat="server" Text="Submit" />
</div>


protected void SubmitButton_Click(object sender, EventArgs e)
{
    sendToSharePoint();
    Response.BufferOutput = true;
    Response.Redirect("Submission.aspx");
}

protected void sendToSharePoint()
{

    try
    {
        string siteUrl = "https://tenant.sharepoint.com/sites/lee";

        ClientContext clientContext = new ClientContext(siteUrl);
        SecureString securePassword = new SecureString();
        foreach (char c in "password".ToCharArray()) securePassword.AppendChar(c);
        clientContext.Credentials = new SharePointOnlineCredentials("lee@tenant.onmicrosoft.com", securePassword);                
        string sDocName = string.Empty;
        string sDocName1 = string.Empty;
        Uri uri = new Uri(siteUrl);
        string sSPSiteRelativeURL = uri.AbsolutePath;
        sDocName = UploadFile(clientContext,upldGradeReport.FileContent, upldGradeReport.FileName, sSPSiteRelativeURL, "MyDoc");
        sDocName1 = UploadFile(clientContext,upldExpenseReceipt.FileContent, upldExpenseReceipt.FileName, sSPSiteRelativeURL, "MyDoc");

        //prior CSOM code to insert values into a new List Item exists here

        //clientContext.ExecuteQuery();
    }
    catch (Exception ex)
    {
        String ThisError = ex.Message;
    }
}

public String UploadFile(ClientContext clientContext,Stream fs, string sFileName, string sSPSiteRelativeURL, string sLibraryName)
{
    string sDocName = string.Empty;
    try
    {
        var sFileURL = String.Format("{0}/{1}/{2}", sSPSiteRelativeURL, sLibraryName, sFileName);

        Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, sFileURL, fs, true);
        sDocName = sFileName;
    }
    catch (Exception ex)
    {
        sDocName = string.Empty;
        //SPErrorMsg = ex.Message;
    }
    return sDocName;
}
...