System.Drawingকোনও ইউআরআইতে চিত্রের ফর্ম্যাটটি খুঁজতে এটি ব্যবহার করার দরকার নেই। আপনি সিস্টেম.ড্রেইং.কমন নুগেট প্যাকেজটি ডাউনলোড System.Drawingনা করা পর্যন্ত উপলভ্য নয় এবং অতএব আমি এই প্রশ্নের কোনও ভাল ক্রস প্ল্যাটফর্মের উত্তর দেখতে পাচ্ছি না।.NET Core
এছাড়াও, মাইক্রোসফ্ট স্পষ্টভাবে এর ব্যবহারকে নিরুৎসাহিত করারSystem.Net.WebClient কারণে আমার উদাহরণ ব্যবহার করে না ।System.Net.WebClient
আমরা আপনাকে WebClientনতুন বিকাশের জন্য ক্লাসটি ব্যবহার করার পরামর্শ দিচ্ছি না । পরিবর্তে, System.Net.Http.Http ক্লায়েন্ট ক্লাসটি ব্যবহার করুন ।
একটি ইউআরএল থেকে একটি ছবি ডাউনলোড করুন এবং একটি ফাইল (ক্রস প্ল্যাটফর্ম) এ লিখুন *
* পুরানো ছাড়া System.Net.WebClientএবং System.Drawing।
এই পদ্ধতিটি অ্যাসিঙ্ক্রোনসিভভাবে একটি চিত্র (বা কোনও ফাইল ইউআরআই ফাইলের প্রসারিত হওয়া অবধি) ডাউনলোড করবে System.Net.Http.HttpClientএবং তারপরে ছবিটিতে ইউআরআই-তে থাকা একই ফাইল এক্সটেনশনটি ব্যবহার করে কোনও ফাইলে এটি লিখবে।
ফাইল এক্সটেনশন পাচ্ছেন
ফাইল এক্সটেনশান পাওয়ার প্রথম অংশটি ইউআরআই থেকে সমস্ত অপ্রয়োজনীয় অংশ সরিয়ে দিচ্ছে।
আমরা UriPartial.Path এর সাথে Uri.GetLeftPart () ব্যবহার করি যা Schemeআপ থেকে শুরু করে সমস্ত কিছু পেতে Path।
অন্য কথায়, https://www.example.com/image.png?query&with.dotsহয়ে যায় https://www.example.com/image.png।
এর পরে, আমরা কেবলমাত্র এক্সটেনশনটি পেতে (আমার আগের উদাহরণে ) পাথ.গেট এক্সটেনশন ( .png) ব্যবহার করি।
var uriWithoutQuery = uri.GetLeftPart(UriPartial.Path);
var fileExtension = Path.GetExtension(uriWithoutQuery);
ছবিটি ডাউনলোড করা হচ্ছে
এখান থেকে এটি সরাসরি এগিয়ে হওয়া উচিত। সঙ্গে চিত্র ডাউনলোড করার HttpClient.GetByteArrayAsync ডিরেক্টরি উপস্থিত রয়েছে নিশ্চিত করা, পথ তৈরি করুন এবং তারপর সঙ্গে পথে বাইট লিখতে File.WriteAllBytesAsync () (অথবা File.WriteAllBytesযদি আপনি .NET ফ্রেমওয়ার্ক রয়েছে)
private async Task DownloadImageAsync(string directoryPath, string fileName, Uri uri)
{
using var httpClient = new HttpClient();
var uriWithoutQuery = uri.GetLeftPart(UriPartial.Path);
var fileExtension = Path.GetExtension(uriWithoutQuery);
var path = Path.Combine(directoryPath, $"{fileName}{fileExtension}");
Directory.CreateDirectory(directoryPath);
var imageBytes = await _httpClient.GetByteArrayAsync(uri);
await File.WriteAllBytesAsync(path, imageBytes);
}
নোট করুন যে আপনার নিম্নলিখিত নির্দেশাবলী ব্যবহার করে প্রয়োজন।
using System;
using System.IO;
using System.Threading.Tasks;
using System.Net.Http;
ব্যবহারের উদাহরণ
var folder = "images";
var fileName = "test";
var url = "https://cdn.discordapp.com/attachments/458291463663386646/592779619212460054/Screenshot_20190624-201411.jpg?query&with.dots";
await DownloadImageAsync(folder, fileName, new Uri(url));
মন্তব্য
HttpClientপ্রতিটি পদ্ধতি কলের জন্য একটি নতুন তৈরি করা খারাপ অভ্যাস । এটি পুরো অ্যাপ্লিকেশন জুড়ে পুনরায় ব্যবহার করার কথা। আমি ImageDownloaderআরও একটি ডকুমেন্টেশন সহ একটি (50 টি লাইন) এর একটি সংক্ষিপ্ত উদাহরণ লিখেছি যা সঠিকভাবে HttpClientএটির পুনরায় ব্যবহার করে এবং সঠিকভাবে নিষ্পত্তি করে যা আপনি এখানে খুঁজে পেতে পারেন ।