با یک سند ذخیره شده در `SharePoint` Online کار کنید

Microsoft SharePoint Online مجموعه ای از فناوری های مبتنی بر وب است که ذخیره، اشتراک گذاری و مدیریت اطلاعات دیجیتال را برای سازمان ها آسان می کند. می توانید با استفاده از Aspose.Words قدرتمند ما برای .NET با اسناد ذخیره شده در پوشه “Shared Documents” در SharePoint کار کنید.

در این مقاله، ما یک سناریوی رایج برای تبدیل یک سند آپلود شده در پوشه “Shared Documents” به فرمت PDF و بارگذاری مجدد سند حاصل به پوشه را پوشش خواهیم داد.

از پیش تعیین شده

  1. به برنامه توسعه دهنده Microsoft 365 بپیوندید
  2. یک سندباکس فوری طبق آموزش تصویری راه اندازی کنید
  3. اعتبارنامه های مبتنی بر برنامه برای SharePoint Online همانطور که در راه اندازی یک مدیر فقط برای برنامه با مجوزهای مستاجر توضیح داده شده است ایجاد کنید
  4. سند را با نام “TestDoc.docx” در سایت ارتباط ریشه در پوشه “Shared Documents” آپلود کنید
  5. مجوز Aspose.Words را خریداری کنید یا از مجوز و اشتراک استفاده کنید

ایجاد برنامه کنسول

برای ارزیابی نحوه کار Aspose.Words برای .NET با اسناد SharePoint، باید یک برنامه کنسول با تنظیمات مناسب ایجاد کنید و منطق دانلود یک سند از پوشه “Shared Documents”، پردازش آن و سپس آپلود این فایل در همان پوشه را پیاده سازی کنید.. برای انجام این کار، دستورالعمل های توضیح داده شده در این بخش را دنبال کنید.

برای اجرای دستورالعمل ها، باید مقادیر پارامترهای زیر را که پس از انجام مراحل در قسمت “Preset” در دسترس خواهند بود، پیدا و برطرف کنید:

یک پروژه کاربردی کنسول جدید ایجاد کنید

برای ایجاد یک پروژه برنامه کاربردی کنسول جدید، این مراحل را دنبال کنید:

  1. در Visual Studio، یک پروژه برنامه کاربردی کنسول جدید با نام “SPOnlineExample” برای زبان C# و چارچوب هدف .NET 6 ایجاد کنید
  2. بسته های زیر را اضافه کنید:
    • Microsoft.Extensions.Configuration.Json
    • Aspose.Words

افزودن فایل پیکربندی

برای افزودن فایل پیکربندی، مراحل زیر را دنبال کنید:

  1. یک فایل “appsettings.json” را به پروژه اضافه کنید

  2. محتوای زیر را به فایل اضافه کنید: JSON

    {
      "TenantId": "Your tenant id.",
      "TenantName": "Your tenant name.",
    
      "ClientSecret": "App client secret.",
      "ClientId": "App client id.",
    
      "AsposeWordsLicensePath": "Path to your Aspose.Words license."
    }

  3. فیلدها را با مقادیر سفارشی خود تکمیل کنید.

سرویس گیرنده SharePoint Online REST API را اضافه کنید

یک فایل “SPOClient.cs” در پروژه ایجاد کنید و آن را با محتوای زیر پر کنید:

.NET

using System.Net.Http.Json;
using System.Net.Http.Headers;
using System.Security.Authentication;
using System.Text.Json.Serialization;
using Microsoft.Extensions.Configuration;

namespace SPOnlineExample
{
    /// <summary>
    /// Sharepoint online REST API client.
    /// </summary>
    internal class SPOClient
    {
        private readonly string authUrl;
        private readonly string clientId;
        private readonly string resource;
        private readonly string tenantId;
        private readonly HttpClient client;
        private readonly string tenantName;
        private readonly string clientSecret;

        private const string grandType = "client_credentials";
        private const string resourceId = "00000003-0000-0ff1-ce00-000000000000";
    
        // URL templates.
        private static readonly string authUrlTemplate = "https://accounts.accesscontrol.windows.net/{0}/tokens/OAuth/2";
        private static readonly string downloadfileTemplate = "https://{0}.sharepoint.com/_api/web/GetFileByServerRelativeUrl('{1}')/$value";
        private static readonly string uploadfileTemplate =
            "https://{0}.sharepoint.com/_api/web/GetFolderByServerRelativeUrl('{1}')/Files/add(url='{2}',overwrite=true)";
    
        // Access token.
        private string token = string.Empty;
    
        public SPOClient(IConfigurationRoot appConfig)
        {
            tenantId = appConfig[nameof(tenantId)];
            clientSecret = appConfig[nameof(clientSecret)];
            tenantName = appConfig[nameof(tenantName)];
    
            authUrl = string.Format(authUrlTemplate, tenantId);
            clientId = $"{appConfig[nameof(clientId)]}@{tenantId}";
            resource = $"{resourceId}/{tenantName}.sharepoint.com@{tenantId}";
    
            client = new HttpClient();
        }
    
        public async Task Authorize()
        {
            var formContent = new FormUrlEncodedContent(new[]
            {
                new KeyValuePair<string, string>("grant_type", grandType),
                new KeyValuePair<string, string>("client_id", clientId),
                new KeyValuePair<string, string>("client_secret", clientSecret),
                new KeyValuePair<string, string>("resource", resource)
            });
    
            var response = await client.PostAsync(authUrl, formContent);
            var responseData = await response.Content.ReadFromJsonAsync<AuthRespose>();
    
            if (!response.IsSuccessStatusCode || responseData == null)
                throw new AuthenticationException(responseData?.Description);
    
            token = responseData.Token;
        }
    
        public async Task<Stream> DownloadFile(string relativeFilePath)
        {
            var url = string.Format(downloadfileTemplate, tenantName, relativeFilePath);
            using var request = CreateRequest(url, HttpMethod.Get);
    
            var response = await client.SendAsync(request);
    
            if (!response.IsSuccessStatusCode)
            {
                var errorData = await response.Content.ReadAsStringAsync();
                throw new Exception(errorData);
            }
    
            var fileStream = await response.Content.ReadAsStreamAsync();
            return fileStream;
        }
    
        public async Task UploadFile(string relativeFolderPath, string fileName, Stream fileData)
        {
            var url = string.Format(uploadfileTemplate, tenantName, relativeFolderPath, fileName);
            using var request = CreateRequest(url, HttpMethod.Post);
    
            request.Headers.Add("IF-MATCH", "*"); // Overwrite any changes.
            request.Content = new StreamContent(fileData);
    
            var response = await client.SendAsync(request);
    
            if (!response.IsSuccessStatusCode)
            {
                var errorData = await response.Content.ReadAsStringAsync();
                throw new Exception(errorData);
            }
        }
    
        private HttpRequestMessage CreateRequest(string url, HttpMethod httpMethod)
        {
            var request = new HttpRequestMessage(httpMethod, url);
            request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);
    
            return request;
        }
    
        private class AuthRespose
        {
            public string Error { get; set; } = string.Empty;
    
            [JsonPropertyName("error_description")]
            public string Description { get; set; } = string.Empty;
    
            [JsonPropertyName("access_token")]
            public string Token { get; set; } = string.Empty;
        }
    }
}

منطق سناریو را به برنامه اضافه کنید

محتوای زیر را به فایل “Program.cs” منتقل کنید:

.NET

using Aspose.Words;
using Aspose.Words.Saving;
using Microsoft.Extensions.Configuration;

namespace SPOnlineExample
{
    public static class Program
    {
        static async Task Main(string[] args)
        {
            // The example below downloads the file "testdoc.docx" from the shared documents folder.
            // Converts it to PDF and uploads conversion result to the same folder.

            var appConfig = GetAppConfig();
            var client = new SPOClient(appConfig);
    
            await client.Authorize();
            var fileStream = await client.DownloadFile("/Shared%20Documents/TestDoc.docx");
    
            var lic = new License();
            lic.SetLicense(appConfig["AsposeWordsLicensePath"]);
            var doc = new Document(fileStream);
    
            using var outputStream = new MemoryStream();
            var saveOptions = new PdfSaveOptions();
            doc.Save(outputStream, saveOptions);
    
            await client.UploadFile("/Shared%20Documents", "TestDoc.pdf", outputStream);
    
            Console.WriteLine("Done. Press any key to complete.");
            Console.ReadKey();
        }
    
        private static IConfigurationRoot GetAppConfig()
        {
            // Build configuration
            return JsonConfigurationExtensions.AddJsonFile(
                    new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()),
                    "appsettings.json")
                .Build();
        }
    }
}

مثال ایجاد شده را اجرا کنید و نتیجه را بررسی کنید

در نهایت، مثال ایجاد شده را اجرا کنید و نتیجه ای را که به دست آورده اید بررسی کنید:

  1. پروژه را کامپایل کنید
  2. برنامه کنسول را اجرا کنید

در نتیجه فایل “TestDoc.pdf” باید در پوشه “Shared Documents” سایت ارتباط ریشه قرار گیرد.

همچنین ببینید