user576510
user576510

Reputation: 5915

Sharepoint upload document error "Access denied. You do not have permission to perform this action or access this resource"

I m uploading file to Sharpoint online using C# code from a byte[].

Code is giving the below error:

Access denied. You do not have permission to perform this action or access this resource

I can logon to SP and crate and upload file. I have checked it is same user id which has rights or creating a list, adding documents, Full Control, and Use Remote Interfaces.

    public static bool UploadFile(SP sp, string folderName, string fileNameWithExtension, byte[] fileContent, TraceWriter log)
{
    bool result = false;
    try
    {
        SecureString securePwd = new SecureString();
        char[] pwdarray = sp.pwd.ToCharArray();

        foreach (var item in pwdarray)
        {
            securePwd.AppendChar(item);
        }       
        SharePointOnlineCredentials creds = new SharePointOnlineCredentials(sp.id, securePwd);        
        using (ClientContext clientContext = new ClientContext(sp.url))
        {

            clientContext.Credentials = creds;
            clientContext.AuthenticationMode = ClientAuthenticationMode.Default;
            Web web = clientContext.Web;

            var fileCreationInformation = new FileCreationInformation();
            fileCreationInformation.Content = fileContent;
            fileCreationInformation.Overwrite = true;

            fileCreationInformation.Url = fileNameWithExtension;          
            Microsoft.SharePoint.Client.List docs = web.Lists.GetByTitle("FtpFiles");
            docs.RootFolder.Folders.Add(folderName);
            Microsoft.SharePoint.Client.File uploadFile = docs.RootFolder.Files.Add(fileCreationInformation);
            clientContext.ExecuteQuery();

            return result = true;            
        }
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

Please guide me not getting what is wrong :(

Upvotes: 0

Views: 2638

Answers (1)

Lee Liu
Lee Liu

Reputation: 2091

Here is a demo for your reference and i have tested successfully.

    /// <summary>
    /// upload file to Document Library
    /// </summary>
    /// <param name="context"></param>
    /// <param name="documentLibraryName"></param>
    /// <param name="filePath"></param>
    /// <param name="fileName"></param>
    public static void uploadFileToDocLib(ClientContext context, string documentLibraryName, string filePath,string fileName)
    {

        string siteURL = context.Url.EndsWith("/") ? context.Url.Substring(0, context.Url.Length - 1) : context.Url;

        List list = context.Web.Lists.GetByTitle(documentLibraryName);
        context.Load(list);
        context.ExecuteQuery();

        FileStream fileStream = new FileStream(filePath, FileMode.Open);

        FileCreationInformation newFileInfo = new FileCreationInformation()
        {
            ContentStream = fileStream,
            Url = siteURL + "/" + documentLibraryName + "/" + fileName,
            Overwrite = true
        };

        Microsoft.SharePoint.Client.File file = list.RootFolder.Files.Add(newFileInfo);
        context.Load(file);
        context.ExecuteQuery();
    }

Set credential of SharePoint Online

    /// <summary>
    /// Set credential of SharePoint Online
    /// </summary>
    /// <param name="clientContext"></param>
    /// <param name="userName"></param>
    /// <param name="password"></param>
    public static void setOnlineCredential(ClientContext clientContext,string userName,string password)
    {
        //set the user name and password
        SecureString secureString = new SecureString();
        foreach (char c in password.ToCharArray())
        {
            secureString.AppendChar(c);
        }
        clientContext.Credentials = new SharePointOnlineCredentials(userName, secureString);           
    }

Upvotes: 1

Related Questions