এইচটিটিপিপোস্টডফাইলে থেকে কীভাবে বাইট অ্যারে তৈরি করবেন


155

আমি একটি চিত্র উপাদান ব্যবহার করছি যা একটি ফিনবাইনারি পদ্ধতিযুক্ত। ভাবছি কীভাবে আমি আমার ইনপুট স্ট্রিমটিকে বাইট অ্যারে রূপান্তর করব

HttpPostedFile file = context.Request.Files[0];
byte[] buffer = new byte[file.ContentLength];
file.InputStream.Read(buffer, 0, file.ContentLength);

ImageElement image = ImageElement.FromBinary(byteArray);

আমরা কীভাবে অন্য একটি .aspx পৃষ্ঠায় ফাইল পোস্ট করছি?
— শিবী

এই লাইনটি ফাইল করে না I ইনপুটস্ট্রিম.আর পড়ুন (বাফার, 0, file.ContentLength); ইনপুট স্ট্রিম থেকে বাইট দিয়ে বাফারটি পূরণ করবেন? নীচের উত্তরে @ ওল্ফওয়াইর্ড দ্বারা উল্লিখিত অনুসারে কেন আমরা বাইনারিআডার.রেপবিটস (...) ব্যবহার করব ? ইমেজএলমেন্ট করবে না romফর্মবাইনারি (বাফার); সমস্যা সমাধান কর?
— শ্রীনিধি শঙ্কর

উত্তর:


290

স্ট্রিম থেকে বাইট অ্যারেটি ফেরত দিতে বাইনারিআডার অবজেক্টটি ব্যবহার করুন:

byte[] fileData = null;
using (var binaryReader = new BinaryReader(Request.Files[0].InputStream))
{
    fileData = binaryReader.ReadBytes(Request.Files[0].ContentLength);
}

1
যেমন নীচে জেফ, বি। বাইট হওয়া উচিত [] বিনদাটা = বি। রিডবাইটস (ফাইল.কন্টেন্টলেন্ট); হিসাবে। দৈর্ঘ্য দীর্ঘ যেখানে রিডবাইটস একটি অন্তর্নির্মিত প্রত্যাশা করে।
— স্পঞ্জবয়

বাইনারিআডারকে বন্ধ করতে ভুলবেন না।
— ক্রিস দ্বোয়ার

কবজির মতো কাজ করুন। এই সহজ সমাধানের জন্য আপনাকে ধন্যবাদ (জেফ, স্পঞ্জবয় এবং ক্রিসের মন্তব্যে)!
— ডেভিড

29
বাইনারি রিডারটি বন্ধ করতে হবে না, কারণ এমন একটি ব্যবহার রয়েছে যা স্বয়ংক্রিয়ভাবে পাঠককে নিষ্পত্তি বন্ধ করে দেয়
— বিয়ার্ডিনাসুট

1
এটি একটি .ডোক্স ফাইলের জন্য কেন কাজ করবে না সে সম্পর্কে কোনও ধারণা? stackoverflow.com/questions/19232932/...
— wilsjd


12

আপনার ফাইল ইনপুটস্ট্রিম.পজিশনটি স্ট্রিমের শেষে সেট করা থাকলে এটি কাজ করবে না। আমার অতিরিক্ত লাইন:

Stream stream = file.InputStream;
stream.Position = 0;

3

আপনার প্রশ্নে, উভয় বাফার এবং বাইটআরাইট বাইট বলে মনে হচ্ছে []। তাই:

ImageElement image = ImageElement.FromBinary(buffer);

2

stream.copyto এর আগে আপনাকে অবশ্যই স্ট্রিম.পজিশনটি 0 এ পুনরায় সেট করতে হবে; তাহলে এটি ঠিক আছে works


2

চিত্রগুলির জন্য যদি আপনি ওয়েব পৃষ্ঠাগুলি v2 ব্যবহার করেন তবে ওয়েবআইমেজ ক্লাস ব্যবহার করেন

var webImage = new System.Web.Helpers.WebImage(Request.Files[0].InputStream);
byte[] imgByteArray = webImage.GetBytes();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.