سؤال

أحاول محاكاة تحميل ملف الشفرة من الكؤوس الموقع و أنا الوقوع في بعض المشاكل.أنا أستخدم نفس الكود كما وجدت هنا.هنا هو بلدي رمز:

    <g:form action="upload" method="post" enctype="multipart/form-data">
        <input type="file" name="myFile" />
        <input type="submit" value="Upload" />
    </g:form>

و

def upload = {
    def f = request.getFile('myFile')
    if(!f.empty) {
      flash.message = 'success'
    }    
    else {
       flash.message = 'file cannot be empty'
    }
}

أنا تلقي الخطأ التالي في وقت التشغيل:

Message: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}
Caused by: groovy.lang.MissingMethodException: No signature of method: org.mortbay.jetty.Request.getFile() is applicable for argument types: (java.lang.String) values: {"myFile"}

يبدو أن بعض الربيع التكوين.الربيع لا يبدو أن حقن MultipartHttpServletRequest, لذا طلبي لا يملك الأسلوب المناسب.لقد خلقت هذه التطبيقات باستخدام grails create-app.لم المعدلة الموارد.الملف groovy.أنا باستخدام الكؤوس 1.0.3.

أي مساعدة هي موضع تقدير كبير.على الكؤوس موقع يجعل هذا سهلا.

هل كانت مفيدة؟

المحلول

ومشكلة حلها!

وكنت تستخدم رمز المثال لتحميل الملفات إلى الكؤوس المقدسة مختلف عن المؤلف الأصلي ربما المقصود. والمشكلة هي أنه عندما <م> تحميل تم استدعاء أسلوب وحدة تحكم، وكان في بعض الأحيان لالأصلي تجعل من الصفحة تحميل. وكان الطلب في هذا الأسلوب لم يكن من نوع MultipartHttpServletRequest. عندما فعلت POST مع ملفي لتحميل، ثم فعل الشيء الصحيح الربيع وغيرت بلدي طلب الحصول على MultipartHttpServletRequest. لذلك، أنا في حاجة إلى القيام فحص بسيط في بلدي <م> تحديث طريقة تحكم قبل استخدام طلبي مثل MultipartHttpServletRequest.

if(request instanceof MultipartHttpServletRequest)
{
  MultipartHttpServletRequest mpr = (MultipartHttpServletRequest)request;  
  CommonsMultipartFile f = (CommonsMultipartFile) mpr.getFile("myFile");
  if(!f.empty)
    flash.message = 'success'
  else
   flash.message = 'file cannot be empty'
}   
else
  flash.message = 'request is not of type MultipartHttpServletRequest'

نصائح أخرى

والآن مع استخدام الإصدار 2.x الكؤوس المقدسة:

<g:uploadForm name="upload" action="upload" method="POST">
     <input type="file" name="file" />
</g:uploadForm>

def upload = {
    def file = request.getFile('file')
    assert file instanceof CommonsMultipartFile

    if(!file.empty){ //do something }
    else { //do something }
}

وأكثر نظافة، وأكثر بساطة.

تأكد من تحديث html الخاصة بك (نظام الأفضليات المعمم مع شكل لتحميل من) أن يكون enctype كما أنها تظهر:

<g:form action="upload" method="post" enctype="multipart/form-data">

نأمل أن تكون مفيدة ، يبدو واضح جدا لكنه فكرتي الأولى بعد رؤية رسالة الخطأ الخاصة بك.

هنا يبدو أن لها نفس المشاكل كان لديك. ويقول انه "ثابت" ما يلي:

<اقتباس فقرة>   

وحلها. كان خطأي، كنت ذاهبا في العمل ببراعة قبل اعتماد النموذج، لذلك أعتقد أن هناك أي ملف.

وغير متأكد من كيفية اتخاذ ما قاله، ولكن ربما سوف تساعدك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top