জাভাস্ক্রিপ্ট: ফাইল আপলোড করুন


187

আসুন আমি পৃষ্ঠাতে এই উপাদানটি রয়েছে বলে থাকি:

<input id="image-file" type="file" />

এটি এমন একটি বোতাম তৈরি করবে যা ওয়েব পৃষ্ঠার ব্যবহারকারীদের ব্রাউজারে একটি OS "ফাইল ওপেন ..." ডায়ালগের মাধ্যমে একটি ফাইল নির্বাচন করতে দেয়।

আসুন বলি যে ব্যবহারকারী ক্লিক বোতাম বোতামটি বলে, ডায়ালগটিতে একটি ফাইল নির্বাচন করে, তারপরে ডায়ালগটি বন্ধ করতে "ওকে" বোতামটি ক্লিক করে।

নির্বাচিত ফাইলের নাম এখন এতে সংরক্ষণ করা হয়েছে:

document.getElementById("image-file").value

এখন, ধরা যাক যে সার্ভারটি ইউআরএল "/ আপলোড / চিত্র" এ মাল্টি-পার্ট পোষ্টগুলি পরিচালনা করে।

আমি কীভাবে ফাইলটিকে "/ আপলোড / চিত্র" এ প্রেরণ করব?

এছাড়াও, ফাইলটি আপলোড করা শেষ হয়েছে এমন বিজ্ঞপ্তিটি আমি কীভাবে শুনব?


2
জাভাস্ক্রিপ্ট আপলোডগুলি পরিচালনা করছে না, কারণ এটি সার্ভারসাইড। সার্ভার সাইড স্ক্রিপ্টটি ফাইলটি গ্রহণ করবে এবং তারপরে এটি সরানো হবে। অস্থায়ী ফোল্ডার থেকে কাঙ্ক্ষিত ফোল্ডারে পিএইচপি করার জন্য।
বকুদন


14
পুনরায় খোলার পক্ষে ভোট দিয়েছেন কারণ প্রশ্নটি পজিজএস (প্লেইন পুরাতন জাভাস্ক্রিপ্ট) সম্পর্কিত নয় jQuery।
e2-e4

উত্তর:


95

যতক্ষণ না আপনি AJAX ব্যবহার ফাইল আপলোড করার চেষ্টা করছেন, শুধু ফর্ম জমা করতে /upload/image

<form enctype="multipart/form-data" action="/upload/image" method="post">
    <input id="image-file" type="file" />
</form>

আপনি যদি চিত্রটি পটভূমিতে আপলোড করতে চান (যেমন পুরো ফর্মটি জমা না দিয়ে), আপনি এজ্যাক্স ব্যবহার করতে পারেন:


অথবা ইফ্রেমে 0x0 আকারের চিত্রটি আপলোডার স্ক্রিপ্টের সাথে তার এসসিআর = "" এর মধ্যে রেখে ফর্মটি পোস্ট করুন টার্গেট = "iframeId" ব্যবহার করে ফলাফলটি আবার পড়তে iframe src। লোড ইভেন্ট যা উদাহরণস্বরূপ jQuery ব্যবহার করে আবদ্ধ হতে পারে reading
দিমিত্রি

11
আজকাল জাভাস্ক্রিপ্ট এবং আজাক্সের মাধ্যমে আপভোট করা সম্ভব, দেখুন: স্ট্যাকওভারফ্লো.com/a/10811427 / 694469 (আমি ডাউন করিনি)।
কাজম্যাগনাস

35
@ কাজম্যাগনুস, আপনি সম্ভবত 'আপলোড' বলতে চাইছিলেন তবে দুর্ঘটনাক্রমে 'আপভোট' বলেছেন
স্যামুয়েল অ্যালান

83

খাঁটি জেএস

আপনি অপেক্ষা করুন-চেষ্টা-ক্যাচ দিয়ে বিকল্পভাবে আনতে ব্যবহার করতে পারেন

let photo = document.getElementById("image-file").files[0];
let formData = new FormData();

formData.append("photo", photo);
fetch('/upload/image', {method: "POST", body: formData});

পুরাতন স্কুল পদ্ধতির - এক্সএইচআর

let photo = document.getElementById("image-file").files[0];  // file from input
let req = new XMLHttpRequest();
let formData = new FormData();

formData.append("photo", photo);                                
req.open("POST", '/upload/image');
req.send(formData);

সারসংক্ষেপ

  • সার্ভার সাইডে আপনি মূল ফাইলের নাম (এবং অন্যান্য তথ্য) পড়তে পারেন যা ব্রাউজারে অনুরোধ করার জন্য স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত filename ফর্মডাটা প্যারামিটারে ।
  • আপনাকে অনুরোধ শিরোনাম সেট করার দরকার নেই Content-Type করতে multipart/form-data- এই স্বয়ংক্রিয়ভাবে ব্রাউজার দ্বারা সেট করা হবে।
  • পরিবর্তে /upload/image আপনি পুরো ঠিকানা ব্যবহার করতে পারেন http://.../upload/image
  • আপনি যদি একক অনুরোধে অনেকগুলি ফাইল প্রেরণ করতে চান তবে multipleঅ্যাট্রিবিউটটি ব্যবহার করুন : <input multiple type=... />এবং নির্বাচিত সমস্ত ফাইলকে একইভাবে ফর্মডাটাতে সংযুক্ত করুন (উদাঃphoto2=...files[2]; ... formData.append("photo2", photo2);)
  • উদাহরণস্বরূপ আপনি অতিরিক্ত ডেটা (জেসন) অন্তর্ভুক্ত করতে পারেন let user = {name:'john', age:34} :formData.append("user", JSON.stringify(user));
  • এই সমাধানগুলি সমস্ত বড় ব্রাউজারে কাজ করা উচিত।

আমার জন্য নিখুঁতভাবে কাজ করুন।
ট্রিইউ এনগুইন

formData === ফর্ম জমা দিনenctype="multipart/form-data"
xgqfrms

আমি ত্রুটি net::ERR_ABORTED 405 (Method Not Allowed)
পাচ্ছি

@ হিদ্রতাহমান এই সার্ভারটি সাধারণত প্রদর্শিত হয় যখন সার্ভার আপনার ইউআরএলটির জন্য পোষ্ট পদ্ধতি প্রয়োগ না করে
কামিল কিয়েসজেউস্কি

1
অদ্ভুত - আপনার শিরোনাম অনুযায়ী আমি ভাবছিলাম যে আমাদের আর সার্ভারের প্রয়োজন নেই: ডি
হিদিত রহমান
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.