প্রাইমফ্রিজ পি: ফাইল আপলোড কীভাবে ব্যবহার করবেন? শ্রোতার পদ্ধতিটি কখনই চাওয়া হয় না বা আপলোড করা ফাইলটি নাল হয় / একটি ত্রুটি নিক্ষেপ করে / ব্যবহারযোগ্য হয় না


101

আমি প্রাইমফ্রিজ ব্যবহার করে কোনও ফাইল আপলোড করার চেষ্টা করছি, তবে fileUploadListenerআপলোডটি শেষ হওয়ার পরে পদ্ধতিটি চালু করা হচ্ছে না।

এখানে দেখুন:

<h:form>
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload}"
        mode="advanced" 
        update="messages"
        sizeLimit="100000" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>

    <p:growl id="messages" showDetail="true"/>
</h:form>

এবং শিম:

@ManagedBean
@RequestScoped
public class FileUploadController {

    public void handleFileUpload(FileUploadEvent event) {
        FacesMessage msg = new FacesMessage("Succesful", event.getFile().getFileName() + " is uploaded.");
        FacesContext.getCurrentInstance().addMessage(null, msg);
    }

}

আমি পদ্ধতিটিতে একটি ব্রেকপয়েন্ট রেখেছি, তবে এটি কখনও বলা হয় না। ব্যবহার করার সময় mode="simple"এবং ajax="false"এটি আহ্বান করা হয়েছিল, তবে আমি এটি উন্নত মোডে কাজ করতে চাই। আমি নেটবিয়ান এবং গ্লাসফিশ ৩.১ ব্যবহার করছি।

উত্তর:


224

কীভাবে কনফিগার করতে হবে এবং সমস্যা সমাধানের বিষয়টি <p:fileUpload>নির্ভর করে প্রাইমফিজ সংস্করণে।

সমস্ত প্রাইমফ্রিজ সংস্করণ

নীচের প্রয়োজনীয়তাগুলি সমস্ত প্রাইমফ্রিজ সংস্করণগুলিতে প্রযোজ্য:

  1. enctypeএর অ্যাট্রিবিউট <h:form>চাহিদা সেট হওয়ার multipart/form-data। যখন এটি অনুপস্থিত থাকে, এজাক্স আপলোডটি কেবল কাজ করতে পারে তবে সাধারণ ব্রাউজারের আচরণটি অনির্ধারিত এবং ফর্ম রচনা এবং ওয়েব ব্রাউজার মেক / সংস্করণে নির্ভর করে। এটি সর্বদা নিরাপদ দিকে থাকতে নির্দিষ্ট করুন।

  2. যখন ব্যবহার mode="advanced"(অর্থাত Ajax আপলোড, এই ডিফল্ট), তারপর নিশ্চিত করুন যে আপনি একটি করেছি <h:head>(মাস্টার) টেমপ্লেটে। এটি নিশ্চিত করবে যে প্রয়োজনীয় জাভাস্ক্রিপ্ট ফাইলগুলি যথাযথভাবে অন্তর্ভুক্ত রয়েছে। এটি mode="simple"(নন-এজাক্স আপলোড) এর জন্য প্রয়োজনীয় নয় , তবে এটি অন্য সমস্ত প্রাইমফ্রিজ উপাদানগুলির চেহারা'আন'ফিল এবং কার্যকারিতাটি ভেঙে দেবে, সুতরাং আপনি যে কোনও উপায়ে এটি মিস করতে চান না।

  3. ব্যবহারের সময় mode="simple"(অর্থাত অ Ajax আপলোড), তারপর Ajax কোনো PrimeFaces আদেশ বোতাম / দ্বারা সংযোগগুলি অক্ষম হওয়া আবশ্যক ajax="false", আর আপনি ব্যবহার করা আবশ্যক <p:fileUpload value>সঙ্গে <p:commandButton action>পরিবর্তে <p:fileUpload fileUploadListener>(PrimeFaces জন্য <= 7.x) অথবা <p:fileUpload listener>(PrimeFaces জন্য> = 8.x)

সুতরাং, আপনি যদি চান (অটো) ফাইলটি আজাক্স সমর্থন সহ আপলোড করুন (মনে রাখবেন <h:head>!):

<h:form enctype="multipart/form-data">
    <p:fileUpload fileUploadListener="#{bean.upload}" auto="true" /> // for PrimeFaces >= 8.x this should be listener instead of fileUploadListener 
</h:form>
public void upload(FileUploadEvent event) {
    UploadedFile uploadedFile = event.getFile();
    String fileName = uploadedFile.getFileName();
    String contentType = uploadedFile.getContentType();
    byte[] contents = uploadedFile.getContents(); // Or getInputStream()
    // ... Save it, now!
}

অথবা আপনি যদি অজেক্স ফাইল আপলোড করতে চান:

<h:form enctype="multipart/form-data">
    <p:fileUpload mode="simple" value="#{bean.uploadedFile}" />
    <p:commandButton value="Upload" action="#{bean.upload}" ajax="false" />
</h:form>
private UploadedFile uploadedFile; // +getter+setter

public void upload() {
    String fileName = uploadedFile.getFileName();
    String contentType = uploadedFile.getContentType();
    byte[] contents = uploadedFile.getContents(); // Or getInputStream()
    // ... Save it, now!
}

দয়া করে মনে রাখবেন যেমন Ajax সংক্রান্ত বৈশিষ্ট্যাবলী কি auto, allowTypes, update, onstart, oncomplete, ইত্যাদি হয় উপেক্ষিত মধ্যে mode="simple"। সুতরাং এ জাতীয় ক্ষেত্রে তাদের নির্দিষ্ট করা অকারণে।

এছাড়াও নোট করুন যে আপনার উল্লিখিত পদ্ধতিগুলির মধ্যে অবিলম্বে ফাইলের সামগ্রীগুলি পড়া উচিত এবং পরে এইচটিটিপি অনুরোধের দ্বারা অনুরোধ করা কোনও আলাদা বিন পদ্ধতিতে নয়। এটি হ'ল আপলোড করা ফাইলের সামগ্রীগুলি অনুরোধটিকে স্কুপ করে দেওয়া হয় এবং এইভাবে পরে / ভিন্ন HTTP অনুরোধে অনুপলব্ধ। পরবর্তী অনুরোধে এটি পড়ার যে কোনও প্রয়াস সম্ভবত java.io.FileNotFoundExceptionঅস্থায়ী ফাইলের সাথে শেষ হবে ।


প্রাইমফিস্কস 8.x

কনফিগারেশনটি নীচের 5.x সংস্করণ তথ্যের অনুরূপ, তবে আপনার শ্রোতা যদি না ডাকা হয় তবে অনুগ্রহ করে ফোন করা হয়েছে কিনা listenerএবং তা পরীক্ষা করুন (পূর্ব 8.x সংস্করণের মত)fileUploadListener

প্রাইমফ্রিজস 5.x

আপনি যদি জেএসএফ ২.২ ব্যবহার করেন এবং আপনার faces-config.xmlজেএসএফ ২.২ সংস্করণ অনুসারে ঘোষণা করা হয় তবে এটির জন্য কোনও অতিরিক্ত কনফিগারেশন প্রয়োজন হয় না । আপনার প্রাইমফ্রিজ ফাইল আপলোড ফিল্টার মোটেই দরকার নেই। যদি আপনার পক্ষে অস্পষ্ট না হয় যেভাবে ব্যবহৃত টার্গেট সার্ভারটি নির্ভর করে জেএসএফকে কীভাবে সঠিকভাবে ইনস্টল এবং কনফিগার করতে হয়, মাভেনের মাধ্যমে জেএসএফ লাইব্রেরিগুলি কীভাবে সঠিকভাবে ইনস্টল করতে ও কনফিগার করতে হয় তার দিকে যান? এবং আমাদের জেএসএফ উইকি পৃষ্ঠার "জেএসএফ ইনস্টল করা" বিভাগ

তবে আপনি যদি এখনও জেএসএফ ২.২ ব্যবহার করছেন না এবং আপনি এটি আপগ্রেড করতে পারবেন না (সার্ভলেট Serv.০ সামঞ্জস্যপূর্ণ ধারকটিতে ইতিমধ্যে অনায়াস হওয়া উচিত) তবে আপনাকে নীচে প্রাইমফিজ ফাইল ফাইল আপলোড ফিল্টারটি ম্যানুয়ালি নিবন্ধিত web.xmlকরতে হবে (এটি মাল্টিটি পার্স করবে) অংশ অনুরোধ এবং নিয়মিত অনুরোধ পরামিতি মানচিত্র পূরণ করুন যাতে FacesServletস্বাভাবিক হিসাবে কাজ চালিয়ে যেতে পারে):

<filter>
    <filter-name>primeFacesFileUploadFilter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>primeFacesFileUploadFilter</filter-name>
    <servlet-name>facesServlet</servlet-name>
</filter-mapping>

<servlet-name>এর মান facesServletঠিক মান মেলানো <servlet>এর এন্ট্রি javax.faces.webapp.FacesServletএকই web.xml। সুতরাং যদি এটি উদাহরণস্বরূপ হয় Faces Servlet, তবে আপনাকে ম্যাচ করার জন্য সেই অনুযায়ী সম্পাদনা করতে হবে।


প্রাইমফ্রিজস 4.x

প্রাইমফ্রিজস 5.x এর একই গল্পটি 4.x তেও প্রযোজ্য।

দ্বারা আপলোড করা ফাইল সামগ্রীটি পেতে কেবলমাত্র একটি সম্ভাব্য সমস্যা রয়েছে UploadedFile#getContents()nullঅ্যাপাচি কমন্স ফাইলআপলোডের পরিবর্তে নেটিভ এপিআই ব্যবহৃত হলে এটি ফিরে আসবে। UploadedFile#getInputStream()পরিবর্তে আপনার ব্যবহার করা উচিত। আরও দেখুন কীভাবে পি: ফাইল থেকে আপলোড করা ছবিটি মাইএসকিউএল-এ বিএলএলবি হিসাবে আপলোড করবেন?

নেটিভ এপিআই সহ আরেকটি সম্ভাব্য সমস্যা প্রকাশিত হবে যখন আপলোড উপাদানটি এমন ফর্মটিতে উপস্থিত থাকে যার উপর একটি পৃথক "নিয়মিত" এজ্যাক্স অনুরোধ বরখাস্ত করা হয় যা আপলোড উপাদানটি প্রক্রিয়া করে না। আরও দেখুন ফাইল আপলোড প্রাইমফাইজস 4.0 / জেএসএফ 2.2.x - এজেএক্সের সাথে কাজ করে না - javax.servlet.SerletException: অনুরোধের সামগ্রী-ধরণটি কোনও মাল্টিপার্ট / ফর্ম-ডেটা নয়

অ্যাপাচি কমন্স ফাইলআপলোডে স্যুইচ করে উভয় সমস্যার সমাধান করা যেতে পারে। বিস্তারিত জানতে প্রাইমফ্রিজস 3.x বিভাগটি দেখুন।


প্রাইমফ্রিজস 3.x

এই সংস্করণটি জেএসএফ ২.২ / সার্লেট ৩.০ নেটিভ ফাইল আপলোড সমর্থন করে না। আপনাকে ম্যানুয়ালি অ্যাপাচি কমন্স ফাইলআপলোড ইনস্টল করতে হবে এবং স্পষ্টভাবে ফাইল আপলোড ফিল্টারটি নিবন্ধিত করতে হবে web.xml

আপনার নিম্নলিখিত গ্রন্থাগারগুলি প্রয়োজন:

তাদের অবশ্যই ওয়েব অ্যাপের রানটাইম ক্লাসপথে উপস্থিত থাকতে হবে। মাভেন ব্যবহার করার সময়, তারা কমপক্ষে রানটাইম স্কোপড রয়েছে তা নিশ্চিত করুন (সংকলনের ডিফল্ট স্কোপটিও ভাল)। জ্যানগুলি যখন ম্যানুয়ালি বহন করে চলেছে তখন নিশ্চিত হয়ে নিন যে সেগুলি /WEB-INF/libফোল্ডারে শেষ হয়েছে ।

ফাইল আপলোড ফিল্টার রেজিস্ট্রেশন বিশদটি এখানে উপরের প্রাইমফিসি 5.x বিভাগে পাওয়া যাবে। যদি আপনি প্রাইমফ্রিজস 4+ ব্যবহার করেন এবং আপনি জেএসএফ ২.২ / সার্লেট ৩.০ নেটিভ ফাইল আপলোডের পরিবর্তে স্পষ্টতই অ্যাপাচি কমন্স ফাইল আপলোড ব্যবহার করতে চান তবে আপনাকে উল্লিখিত লাইব্রেরির পাশে প্রয়োজন এবং নীচের প্রসঙ্গের প্যারামেও ফিল্টার করতে পারেন web.xml:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>commons</param-value><!-- Allowed values: auto, native and commons. -->
</context-param>

সমস্যা সমাধান

যদি এটি এখনও কাজ না করে, তবে এখানে আরও সম্ভাব্য কারণগুলি প্রাইমফ্রিজ কনফিগারেশনের সাথে সম্পর্কিত নয়:

  1. শুধু আপনি PrimeFaces ফাইল আপলোড ফিল্টার ব্যবহার করছেন: অন্য এর Filterআপনার ওয়েব অ্যাপ্লিকেশনটি যা রান করার আগে PrimeFaces ফাইল আপলোড ফিল্টার এবং ইতিমধ্যে যেমন ডাকে অনুরোধের মূল ধ্বংস করেছে getParameter(), getParameterMap(), getReader(), ইত্যাদি। একটি অনুরোধের বডিটি কেবল একবার পার্স করা যায়। আপনি যখন ফাইল আপলোড ফিল্টারটি কাজ করার আগে এই পদ্ধতিগুলির মধ্যে একটি কল করেন, তখন ফাইল আপলোড ফিল্টার একটি খালি অনুরোধের বডি পাবে।

    এটি ঠিক করতে, আপনাকে অন্য ফিল্টারটি <filter-mapping>প্রবেশের আগে ফাইল আপলোড ফিল্টারটি লাগাতে হবে web.xml। যদি অনুরোধটি কোনও multipart/form-dataঅনুরোধ না হয় তবে ফাইল আপলোড ফিল্টারটি ঠিক এমনভাবে চলতে থাকবে যেন কিছুই ঘটেনি। আপনি যদি স্বয়ংক্রিয়ভাবে যুক্ত ফিল্টারগুলি ব্যবহার করেন যেহেতু তারা টীকাগুলি ব্যবহার করে (যেমন: প্রেটিফোর্ডস), আপনাকে ওয়েব.এক্সএমএল এর মাধ্যমে সুস্পষ্ট ক্রম যুক্ত করতে হবে। WAR এ টীকাগুলি ব্যবহার করে কীভাবে কার্যনির্বাহনের servlet ফিল্টার ক্রম সংজ্ঞা দেওয়া যায় তা দেখুন

  2. আপনি যদি কেবল প্রাইমফিজ ফাইল ফাইল আপলোড ফিল্টার ব্যবহার করেন তবে: আপনার ওয়েব অ্যাপে আরও একটি Filterআছে যা প্রাইমফ্রিজ ফাইল আপলোড ফিল্টারের আগে চলে এবং একটি RequestDispatcher#forward()কল সম্পাদন করেছে । সাধারণত, ইউআরএল পুনর্লিখন ফিল্টারগুলি যেমন প্রাকটিফিসগুলি এটি করে। এই ট্রিগার FORWARDডেস্প্যাচার কিন্তু ফিল্টার ডিফল্টরূপে শুনতে REQUESTডেস্প্যাচার শুধুমাত্র।

    এটির সমাধানের জন্য, আপনাকে হয় ফরওয়ার্ডিং ফিল্টারের আগে প্রাইমফিজ ফাইল ফাইল আপলোড ফিল্টার লাগাতে হবে , অথবা প্রেরণকারীগুলিতে শোনার জন্য প্রাইমফিজ ফাইল ফাইল আপলোড ফিল্টারটি পুনরায় কনফিগার করতে FORWARDহবে:

    <filter-mapping>
        <filter-name>primeFacesFileUploadFilter</filter-name>
        <servlet-name>facesServlet</servlet-name>
        <dispatcher>REQUEST</dispatcher>
        <dispatcher>FORWARD</dispatcher>
    </filter-mapping>
    
  3. একটি নেস্টেড আছে <h:form>। এটি এইচটিএমএলে অবৈধ এবং ব্রাউজারের আচরণ নির্ধারিত। প্রায়শই বেশি, ব্রাউজার জমা দেওয়ার সময় প্রত্যাশিত ডেটা প্রেরণ করবে না। আপনি বাসা বাঁধছেন না তা নিশ্চিত করুন <h:form>। এটি সম্পূর্ণরূপে ফর্ম এর নির্বিশেষে enctype। কিছুতেই বাসা বাঁধে না।

আপনার যদি এখনও সমস্যা হয় তবে ভাল, HTTP ট্র্যাফিক ডিবাগ করুন। ওয়েব ব্রাউজারের বিকাশকারী সরঞ্জামসেটটি খুলুন (ক্রোম / ফায়ারব্যাগ 23 + / আই 9 + এফ 12 টিপুন) এবং নেট / নেটওয়ার্ক বিভাগটি পরীক্ষা করুন। যদি এইচটিটিপি অংশটি দেখতে ভাল লাগে তবে জেএসএফ কোডটি ডিবাগ করুন। একটি ব্রেকপয়েন্ট রাখুন FileUploadRenderer#decode()এবং সেখান থেকে অগ্রসর হন।


আপলোড করা ফাইল সংরক্ষণ করা হচ্ছে

আপনি অবশেষে এটি কাজ করার পরে, আপনার পরবর্তী প্রশ্ন সম্ভবত "আপলোড করা ফাইলটি কীভাবে / কোথায় সংরক্ষণ করব?" এর মতো হতে পারে। ভাল, এখানে চালিয়ে যান: জেএসএফ-এ আপলোড করা ফাইলটি কীভাবে সংরক্ষণ করবেন


2
আর একটি কারণ হতে পারে আপনি web.xmlপ্রাইমফ্রিজ ব্যবহারকারী গাইড অনুসারে প্রাইমফ্রিজ আপলোড ফিল্টারটি নিবন্ধন করেন নি । আপনি কি এটা পড়েছেন? এটি তবে কেন আপনার পক্ষে mode="simple"কাজ করে তা ব্যাখ্যা করবে না ।
বালুসক

1
হ্যাঁ আমি এটি পড়েছি এবং আমি ফিল্টারটি নিবন্ধভুক্ত করেছি, তবে আমি কেবল লক্ষ্য করেছি যে সার্ভারটি শুরু করার সময় এটি আমাকে একটি ত্রুটি দিচ্ছে "সরিয়ে দিন: ওয়েবমোডুল [/ ইভেন্টসক্যালেন্ডারি] পিডব্লুসি 1270: ফিল্টার প্রারম্ভিক ব্যতিক্রমী ফাইল আপলোড ফিল্টার" আমার মনে হয় না এতো বোধ হয় আগে এটা লক্ষ্য। এই ত্রুটিটি সমাধান করার জন্য কোনও টিপস?
রডরিগো ক্যাভালঙ্কেটে

2
সম্ভবত ফিল্টার ম্যাপিংটি ভুল। এটা তোলে ম্যাপ করা হয়েছে <servlet-name>এর FacesServletহিসাবে আপনি definied থাকেন web.xml। এটি বেশিরভাগ আইডিই / কোড-জেনারেটর দ্বারা ডিফল্ট হয় Faces Servletতবে এটি facesServletনামকরণের কনভেনশনগুলির আরও নিশ্চিত হওয়া বা ভাল হতে পারে ।
বালুসসি

2
ক্লাসপথ এবং কমন্স-আইওতে কমন্স-ফাইলআপলোড যুক্ত করে এটি সমাধান নয়, কোথাও কি বলা হচ্ছে যে এই লাইব্রেরিগুলির প্রয়োজন? যাইহোক, এখনই সবকিছু ঠিকঠাকভাবে কাজ করছে বলে মনে হচ্ছে, পদ্ধতিটি যেমন বলা হচ্ছে ঠিক তেমনই বলা হচ্ছে, ধন্যবাদ।
রডরিগো ক্যাভালঙ্কেতে

1
সুতরাং এটি সমস্ত পরিস্থিতিটি নিয়ে এসেছিল যে আমি টোমইই
দিমিত্রি আলেকজান্দ্রভ

30

আপনি খুব সুন্দর ব্যবহার করছেন? তারপরে ফরওয়ার্ডে প্রেরণকারী সেট করুন:

<filter-mapping>
   <filter-name>PrimeFaces FileUpload Filter</filter-name>
   <servlet-name>Faces Servlet</servlet-name>
   <dispatcher>FORWARD</dispatcher>
</filter-mapping>

ওসিপি পুনর্লিখনের সাথে ব্যবহার করার পরে এটি এখনও একটি সমস্যা। আমি তোমার কাছে বিয়ার পাওনা :)
বাবল

7

একটি বিষয় আমি প্রাইমফেসে ৩.৪ এবং নেটবিন্স .2.২ দিয়ে লক্ষ্য করেছি:

ফাংশন হ্যান্ডেলফিলআপলোড অর্থাৎ (ইভেন্ট) এর জন্য নেটবিয়ানদের স্বয়ংক্রিয়-পূর্ণ পরামিতিগুলি সরান অন্যথায় ইভেন্টটি শূন্য হতে পারে।

<h:form>
    <p:fileUpload fileUploadListener="#{fileUploadController.handleFileUpload(event)}"
        mode="advanced" 
        update="messages"
        sizeLimit="100000" 
        allowTypes="/(\.|\/)(gif|jpe?g|png)$/"/>

    <p:growl id="messages" showDetail="true"/>
</h:form>

2

জাভ্যাক্স.ফেসেসের মতো মনে হচ্ছে SE SEPARATOR_CHAR অবশ্যই _ এর সমান হবে না


2
দয়া করে বিস্তারিত বলতে পারবেন ?!
কার্ল রিখটার

0

আমার প্রথম বিষয় 5.3 নিয়ে একই সমস্যা ছিল এবং আমি বালাসক দ্বারা বর্ণিত সমস্ত পয়েন্টগুলিতে কোনও ফলাফল ছাড়াই পেরেছি। আমি ফাইল আপলোডলোডারেন্ডার # ডিকোড () ডিবাগ করার জন্য তার পরামর্শ অনুসরণ করেছি এবং আমি আবিষ্কার করেছি যে আমার ওয়েব.এক্সএমএল অপ্রতিষ্ঠিতভাবে সেট করা আছে

<context-param>
  <param-name>primefaces.UPLOADER</param-name>
  <param-value>auto|native|commons</param-value>
</context-param>

পরম-মানটি অবশ্যই এই 3 টি মানের 1 টি হতে হবে তবে সেগুলি সবই নয় !! পুরো কনটেক্সট-পরম বিভাগটি সরিয়ে ফেলা যাবে এবং ডিফল্ট স্বয়ংক্রিয় হবে


0

bean.xhtml

    <h:form enctype="multipart/form-data">    
<p:outputLabel value="Choose your file" for="submissionFile" />
                <p:fileUpload id="submissionFile"
                    value="#{bean.file}"
                    fileUploadListener="#{bean.uploadFile}" mode="advanced"
                    auto="true" dragDropSupport="false" update="messages"
                    sizeLimit="100000" fileLimit="1" allowTypes="/(\.|\/)(pdf)$/" />

</h:form>

Bean.java

@ManagedBean

@ ভিউস্কোপড পাবলিক ক্লাস সাবমিশন সিরিয়ালাইজেবল কার্যকর করে {

private UploadedFile file;

//Gets
//Sets

public void uploadFasta(FileUploadEvent event) throws FileNotFoundException, IOException, InterruptedException {

    String content = IOUtils.toString(event.getFile().getInputstream(), "UTF-8");

    String filePath = PATH + "resources/submissions/" + nameOfMyFile + ".pdf";

    MyFileWriter.writeFile(filePath, content);

    FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
            event.getFile().getFileName() + " is uploaded.", null);
    FacesContext.getCurrentInstance().addMessage(null, message);

}

}

web.xml

    <servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<filter>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PrimeFaces FileUpload Filter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
</filter-mapping>

আপনি কেন ব্যাখ্যা করতে পারেন যে এটি কেন একটি উত্তর? এটি কেবল কোড, ব্যাখ্যা বা যা কিছুই নয়
কুকলতজে

"# {bean.uploadFile vs" বনাম "# {bean.uploadFasta}", আপডেট = "বার্তা" সরান এবং এটি (কেবল) যা আমার পক্ষে কাজ করে!
রোমস্কি

0

এখানকার কোনও পরামর্শই আমার পক্ষে সহায়ক ছিল না। সুতরাং আমাকে প্রাইমফেসগুলি ডিবাগ করতে হয়েছিল এবং সমস্যার কারণটি খুঁজে পেয়েছিলাম:

java.lang.IllegalStateException: No multipart config for servlet fileUpload

তারপরে আমি ওয়েব.এক্সএমএমএলটিতে আমার মুখের সার্লেলে বিভাগ যুক্ত করেছি। সুতরাং এটি সমস্যার সমাধান করেছে:

<servlet>
    <servlet-name>main</servlet-name>

        <servlet-class>org.apache.myfaces.webapp.MyFacesServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
        <multipart-config>
            <location>/tmp</location>
            <max-file-size>20848820</max-file-size>
            <max-request-size>418018841</max-request-size>
            <file-size-threshold>1048576</file-size-threshold>
        </multipart-config>
    </servlet>

0

আমার কাছে একই সমস্যা ছিল, এই পোস্টটিতে বর্ণিত সমস্ত কনফিগারেশন আমার কাছে থাকার কারণে, তবে আমার ক্ষেত্রে ছিল কারণ আমার দুটি jquery আমদানি ছিল (এর মধ্যে একটি ছিল প্রাইমফেসের প্রশ্ন) যা ফাইলগুলি আপলোড করার জন্য দ্বন্দ্ব সৃষ্টি করেছিল caused

প্রাইমফেসস জ্যাকুরি দ্বন্দ্ব দেখুন


আপনি কি তখন ব্রাউজার বিকাশকারী কনসোলে একটি নির্দিষ্ট ত্রুটি পান নি?
কুলেটজে

@ কুকল্টেজে এটি কনসোলটি দেখিয়েছিল: আনকাটড টাইপ এরির: অবজেক্ট [অবজেক্ট অবজেক্ট] এর কোনও পদ্ধতিই 'ফাইল আপলোড' নেই
খ্রিস্টান

0

Tomee বা হুল বিড়াল এবং এটা কাজ পেতে পারেন ব্যবহার মানুষের জন্য, তৈরি করার চেষ্টা context.xml মধ্যে মেটা-INF যোগ allowCasualMultipartParsing = "সত্য"

<?xml version="1.0" encoding="UTF-8"?>
<Context allowCasualMultipartParsing="true">
  <!-- empty or not depending your project -->
</Context>

এটি একটি ভুল ফিল্টার কনফিগারেশন / অর্ডার দেওয়ার জন্য কাজ।
বালুসসি

হাই @ বালুসসি, আপনি আমাদের আরও ব্যাখ্যা দিতে পারেন? এই কাজের চারপাশে আরও ভাল উপায় আছে?
জাভিয়ের ল্যাম্ব্রস

এই প্রশ্নের আমার উত্তর দেখুন।
বালুসসি

0

জেবস .2.২ (আন্ডারটও) এবং প্রাইমফিসহ .0.০ org.primefaces.webapp.filter.FileUploadFilter ওয়েব.এক্সএমএল থেকে সরানো উচিত এবং কনটেক্সট প্যারাম ফাইল আপলোডার দেশীয়তে সেট করা উচিত:

<context-param>
    <param-name>primefaces.UPLOADER</param-name>
    <param-value>native</param-value>
</context-param>

উচিত? আপনি পেতে না নির্দিষ্ট ত্রুটি যদি না?
কুকলতজে

হ্যাঁ, আমার ফাইলআপলোডডেন্ট এ পরিবর্তনগুলি ছাড়া ডাকে না।
অ্যালেক্স

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