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


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.