আইডিইর প্রকল্প ফোল্ডার ওরফে সার্ভারের মোতায়েন ফোল্ডার ব্যতীত এটিকে যে কোনও জায়গায় অ্যাক্সেসযোগ্য স্থানে সংরক্ষণ করুন, কেবলমাত্র পৃষ্ঠা রিফ্রেশ করার পরে আপলোড হওয়া চিত্রের উত্তরে উল্লিখিত কারণগুলির জন্য :
আইডিইর প্রকল্প ফোল্ডারে পরিবর্তনগুলি তত্ক্ষণাত্ সার্ভারের কাজের ফোল্ডারে প্রতিফলিত হয় না। আইডিইতে এক ধরণের পটভূমি কাজ রয়েছে যা যত্ন করে যে সার্ভারের কাজের ফোল্ডারটি সর্বশেষ আপডেটের সাথে সিঙ্ক হয়ে যায় (এটি আইডিই পদটিতে "প্রকাশনা" নামে পরিচিত)। আপনি যে সমস্যার মুখোমুখি হচ্ছেন এটিই এর মূল কারণ।
রিয়েল ওয়ার্ল্ড কোডে এমন পরিস্থিতি রয়েছে যেখানে ওয়েব অ্যাপের মোতায়েন ফোল্ডারে আপলোড করা ফাইলগুলি সংরক্ষণ করা মোটেই কার্যকর হবে না। কিছু সার্ভার (ডিফল্ট বা কনফিগারেশনের মাধ্যমে) স্থানীয় ডিস্ক ফাইল সিস্টেমে মোতায়েন করা ওয়ার ফাইলটি প্রসারিত করে না, পরিবর্তে পুরোপুরি মেমরিতে থাকে। মূলত মোতায়েন হওয়া ওয়ার ফাইলটি সম্পাদনা এবং পুনরায় প্রচার না করে আপনি মেমোরিতে নতুন ফাইল তৈরি করতে পারবেন না।
এমনকি সার্ভার যখন স্থানীয় ডিস্ক ফাইল সিস্টেমে মোতায়েন করা ওয়ার ফাইলটি প্রসারিত করে, তখন নতুনভাবে তৈরি করা সমস্ত ফাইল একটি পুনর্নির্বাচিত বা এমনকি একটি সাধারণ পুনঃসূচনাতে হারিয়ে যাবে, কেবলমাত্র এই নতুন ফাইলগুলি মূল ওয়ার ফাইলের অংশ নয়।
এটা সত্যিই আমাকে বা অন্য কেউ ঠিক যেখানে স্থানীয় ডিস্কে ফাইল সিস্টেমে এটা দীর্ঘ হিসাবে আপনি হিসাবে, সংরক্ষণ করা হবে কাছে কোন ব্যাপার না না না কি ব্যবহার getRealPath()
পদ্ধতি । এই পদ্ধতিটি ব্যবহার করা যে কোনও ক্ষেত্রে উদ্বেগজনক।
স্টোরেজ অবস্থানের পথটি বিভিন্ন উপায়ে নির্দিষ্ট করা যেতে পারে। আপনি সমস্ত দ্বারা এটা করতে হবে নিজেকে । সম্ভবত এটির কারণেই আপনার বিভ্রান্তি সৃষ্টি হয়েছে কারণ আপনি কোনওরকম প্রত্যাশা করেছিলেন যে সার্ভারটি স্বয়ংক্রিয়ভাবে এটি করে। দয়া করে নোট করুন যে চূড়ান্ত আপলোড গন্তব্য নির্দিষ্ট @MultipartConfig(location)
করে না , তবে কেস ফাইলের আকারের জন্য অস্থায়ী স্টোরেজ অবস্থান মেমরি স্টোরেজ প্রান্তিকের চেয়ে বেশি।
সুতরাং, চূড়ান্ত স্টোরেজ অবস্থানের পথটি নিম্নলিখিত যে কোনও একটি দিয়ে সুনির্দিষ্ট করা যেতে পারে:
হার্ডকোডেড:
File uploads = new File("/path/to/uploads");
এর মাধ্যমে পরিবেশ পরিবর্তনশীল SET UPLOAD_LOCATION=/path/to/uploads
:
File uploads = new File(System.getenv("UPLOAD_LOCATION"));
এর মাধ্যমে সার্ভার শুরুর সময় ভিএম যুক্তি -Dupload.location="/path/to/uploads"
:
File uploads = new File(System.getProperty("upload.location"));
*.properties
ফাইল এন্ট্রি হিসাবে upload.location=/path/to/uploads
:
File uploads = new File(properties.getProperty("upload.location"));
web.xml
<context-param>
নাম upload.location
এবং মান সহ /path/to/uploads
:
File uploads = new File(getServletContext().getInitParameter("upload.location"));
যদি কোনও হয় তবে সার্ভার-সরবরাহিত অবস্থানটি ব্যবহার করুন, যেমন জেবস এএস / ওয়াইল্ডফ্লাইতে :
File uploads = new File(System.getProperty("jboss.server.data.dir"), "uploads");
যে কোনও উপায়ে, আপনি সহজেই ফাইলটিকে নিম্নরূপ হিসাবে উল্লেখ এবং সংরক্ষণ করতে পারেন:
File file = new File(uploads, "somefilename.ext");
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath());
}
বা, যখন আপনি কাকতালীয়ভাবে একই নামের সাথে বিদ্যমান ফাইলগুলিকে ওভাররাইট করা থেকে ব্যবহারকারীদের একটি অনন্য ফাইলের নাম স্বয়ংক্রিয়ভাবে তৈরি করতে চান:
File file = File.createTempFile("somefilename-", ".ext", uploads);
try (InputStream input = part.getInputStream()) {
Files.copy(input, file.toPath(), StandardCopyOption.REPLACE_EXISTING);
}
part
জেএসপি / সার্লেটতে কীভাবে প্রাপ্ত হবে তার জবাব দেওয়া হয় কীভাবে জেএসপি / সার্লেট ব্যবহার করে সার্ভারে ফাইল আপলোড করা যায়? এবং part
জেএসএফ-এ কীভাবে প্রাপ্ত হবে তার জবাব দেওয়া হয় জেএসএফ ২.২ <এইচ: ইনপুট ফাইল> ব্যবহার করে ফাইল কীভাবে আপলোড করবেন? সেভ করা ফাইলটি কোথায়?
দ্রষ্টব্য: এটি সংজ্ঞায়িত অস্থায়ী স্টোরেজ অবস্থানের সাথে সম্পর্কিত পথটির ব্যাখ্যা হিসাবে ব্যবহার করবেন না ।Part#write()
@MultipartConfig(location)
আরো দেখুন: