7

मैं एक वेबसाइट बनाने के लिए playframework का उपयोग कर रहा हूँ। और मैं xheditor नामक एक समृद्ध संपादक का भी उपयोग करता हूं।फ़ाइल विभिन्न प्रारूपों के साथ playframework में अपलोड करें

Xheditor AJAX-fileuploading का समर्थन करता है, इसके लिए सर्वर पक्ष की एक क्रिया होती है जो "दायरता" पैरामीटर स्वीकार करता है जिसमें अपलोड फ़ाइल होती है।

public class Application extends Controller { 
    public static void upload(File filedata) { 
     // the filedata should not be null 
     renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}"); 
    } 
} 

यह IE6 में ठीक काम करता है, filedata रिक्त नहीं है और सही डेटा शामिल हैं:

तो मैं एक अपलोड कार्रवाई लिखा था। लेकिन, अगर मैं क्रोम या फ़ायरफ़ॉक्स का उपयोग करता हूं, तो दायरता शून्य है !!

मैं क्या फ़ायरबग प्रस्तुत नजर रखने के लिए फ़ायरबग का उपयोग, और यह इस तरह के एक शीर्ष लेख प्रस्तुत पाया:

content-disposition 
attachment; name="filedata"; filename="051111twdns.zip" 

मुझे लगता है कि खेलने के लिए सही ढंग से इस मामले को संभाल नहीं किया है, इसलिए पैरामीटर "filedata" रिक्त है।

public class Application extends Controller { 
    public static void upload(File filedata) { 
     if(filedata!=null) { 
      // ok, it's IE6 
      renderText("{'err':'', 'msg':{'ur':'/uploaded/xxx.zip'}}"); 
     } else { 
      // it's chrome or firefox, the data is in request.body 
      File targetFile = new File("upload/test.zip"); 
      IOUtils.copy(request.body, new FileOutputStream(targetFile)); 
     } 
    } 
} 

यह अब IE6, क्रोम और फ़ायरफ़ॉक्स में काम किया है, लेकिन , सिर्फ तभी अपलोड फ़ाइल बहुत छोटा है:

आदेश क्रोम और फ़ायरफ़ॉक्स के साथ काम करने के लिए, मुझे लगता है कि कार्रवाई को संशोधित किया। जैसे 4K से कम यदि यह थोड़ा बड़ा है, उदा। 12K, विधि "IOUtils.copy" रिपोर्ट करेंगे "त्रुटि पढ़ें!", यहां तक ​​कि निम्न कोड ऐसी त्रुटि रिपोर्ट करेंगे:

request.body.available() 
request.body.read() 
request.body.read(bytes) 

उत्तर

0

आपको play.data.parsing.ApacheMultipartParser क्लास पर एक नज़र डालना चाहिए जो HTTP अनुरोध से फ़ाइल अटैचमेंट निष्कर्षण प्रबंधित करता है।

GetFieldName फ़ील्ड "हेड-डिस्पोजेक्शन" और "फॉर्म-डेटा" खोज क्षेत्र का नाम प्राप्त करता है। आपके मामले में, यह मौजूद नहीं है।

private String getFieldName(Map /* String, String */ headers) { 
    String fieldName = null; 
    String cd = getHeader(headers, CONTENT_DISPOSITION); 
    if (cd != null && cd.toLowerCase().startsWith(FORM_DATA)) { 

     ParameterParser parser = new ParameterParser(); 
     parser.setLowerCaseNames(true); 
     // Parameter parser can handle null input 
     Map params = parser.parse(cd, ';'); 
     fieldName = (String) params.get("name"); 
     if (fieldName != null) { 
      fieldName = fieldName.trim(); 
     } 
    } 
    return fieldName; 
} 
getFileName में

, यह शीर्ष लेख "सामग्री-स्वभाव" और फिर "फार्म डेटा" या "लगाव" फ़ाइल नाम पाने के लिए खोज करता है।

private String getFileName(Map /* String, String */ headers) { 
    String fileName = null; 
    String cd = getHeader(headers, CONTENT_DISPOSITION); 
    if (cd != null) { 
     String cdl = cd.toLowerCase(); 
     if (cdl.startsWith(FORM_DATA) || cdl.startsWith(ATTACHMENT)) { 
      ParameterParser parser = new ParameterParser(); 
      parser.setLowerCaseNames(true); 
      // Parameter parser can handle null input 
      Map params = parser.parse(cd, ';'); 
      if (params.containsKey("filename")) { 
       fileName = (String) params.get("filename"); 
       if (fileName != null) { 
        fileName = fileName.trim(); 
        // IE7 returning fullpath name (#300920) 
        if (fileName.indexOf('\\') != -1) { 
         fileName = fileName.substring(fileName.lastIndexOf('\\') + 1); 
        } 

       } else { 
        // Even if there is no value, the parameter is present, 
        // so we return an empty file name rather than no file 
        // name. 
        fileName = ""; 
       } 
      } 
     } 
    } 
    return fileName; 
} 

तो जाहिरा तौर पर, आपके मामले में, इस कोड को फ़ाइल नाम मिल जाएगा लेकिन नहीं फ़ील्ड नाम तो शायद यह है कि आपने अपनी filedata क्षेत्र अपने नियंत्रक में अशक्त करने के लिए सेट है।

यह आईई 6 के साथ क्यों काम करता है? (गया है क्योंकि यह वास्तव में कभी नहीं किया गया है और मानक कुछ करता है दूसरों अब और नहीं करते ??? :))

जानकारी के लिए, Crud मॉड्यूल में, fileField.html फाइल अपलोड निम्नलिखित के रूप में घोषित करती है:

<input id="${field.id}" class="${field.errorClass}" type="file" name="${field.name}" /> 

का संबंध है
1

फ़ाइल अपलोडर, जो दस्तावेज की एक lof के लिए/नमूने के साथ अपनी साइट को एकीकृत प्रयास करें अलग-अलग भाषाएं www.uploadify.com/

संबंधित मुद्दे