फ़ाइलें अपलोड करने के लिए OneDrive SDK का उपयोग करें।

इस समय, आपको फ़ाइल पथ पास करना होगा, लेकिन कोड का उपयोग करके अपलोड करने में लंबा समय लगता है।

क्या मैं अस्थायी फ़ाइल पथ पास करने पर भी फ़ाइलें अपलोड कर सकता हूँ?

वर्तमान में मुझे फ़ाइल को सर्वर पर सहेजने के बाद फ़ाइल पथ मिलता है।

ऐसे में स्पीड की समस्या से दिक्कत होती है।

क्या अस्थायी फ़ाइल पथ को देखने का कोई तरीका है?

public async Task<JObject> UploadLargeFiles(string upn, IFormFile files)
    {
        var jObject = new JObject();
        int fileSize = Convert.ToInt32(files.Length);

        var folderName = Path.Combine("wwwroot", "saveLargeFiles");
        var pathToSave = Path.Combine(System.IO.Directory.GetCurrentDirectory(), folderName);
        var fullPath = "";

        if (files.Length > 0)
        {
            var fileName = files.FileName;
            fullPath = Path.Combine(pathToSave, fileName);

            using (var stream = new FileStream(fullPath, FileMode.Create))
                files.CopyTo(stream);
        }

        var filePath = fullPath;

        var fileStream = System.IO.File.OpenRead(filePath);
        GraphServiceClient client = await MicrosoftGraphClient.GetGraphServiceClient();

        var uploadProps = new DriveItemUploadableProperties
        {
            ODataType = null,
            AdditionalData = new Dictionary<string, object>
            {
                { "@microsoft.graph.conflictBehavior", "rename" }
            }
        };

        var item = this.SelectUploadFolderID(upn).Result;
        var uploadSession = await client.Users[upn].Drive.Items[item].ItemWithPath(files.FileName).CreateUploadSession(uploadProps).Request().PostAsync();

        int maxChunkSize = 320 * 1024;
        var uploadTask = new LargeFileUploadTask<DriveItem>(uploadSession, fileStream, maxChunkSize);

        var response = await uploadTask.UploadAsync();

        if (response.UploadSucceeded)
        {
            return 
        }
        else
        {
            return null;
        }
    }
0
김세림 27 अक्टूबर 2020, 07:33

1 उत्तर

सबसे बढ़िया उत्तर

आपके सर्वर की डिस्क शायद वह नहीं है जो इसे धीमा करती है। डिफ़ॉल्ट रूप से, अपलोड की गई फ़ाइलें एक अस्थायी निर्देशिका में संग्रहीत की जाती हैं, जिसे आप अपनी तरह CopyTo(FileStream) का उपयोग करके स्थायी रूप से सहेज सकते हैं।

आप इस चरण को छोड़ सकते हैं और अस्थायी फ़ाइल के लिए एक स्ट्रीम प्राप्त करने के लिए IFormFile.OpenReadStream() को कॉल कर सकते हैं, फिर उसे LargeFileUploadTask को भेज सकते हैं।

मुद्दा यह है कि शायद यह वनड्राइव पर अपलोडिंग है जिसमें सबसे अधिक समय लगता है। आपके सेटअप के आधार पर, आप फ़ाइलों को एक कतार निर्देशिका में सहेजना चाहते हैं (अनुरोध पूर्ण होने के बाद अस्थायी फ़ाइल हटा दी जाती है), और पृष्ठभूमि सेवा उस कतार को पढ़ती है और उन्हें OneDrive पर अपलोड करती है।

0
CodeCaster 27 अक्टूबर 2020, 07:49