2011-10-03 13 views
5

में एकाधिक फ़ाइल अपलोड करें मुझे काम पर एकाधिक फ़ाइल अपलोड करने में कुछ समस्याएं आ रही हैं। जब मैं एक्स फाइलों का चयन करता हूं, तो यह सफलतापूर्वक हो जाता है, लेकिन पहली फ़ाइल को x बार अपलोड किया जा रहा है, और अन्य अपलोड नहीं किए जा रहे हैं। कोई भी यह इंगित करने में सक्षम है कि मैं क्या गलत कर रहा हूं?प्लेफ्रेमवर्क

प्रपत्र:

public static void uploadPictures(long id, String title, List<Blob> files) { 
    String error = "";   
    if(files != null && !title.trim().equals("")) { 
     Project project = Project.findById(id); 
     // Save uploaded files 
     Picture picture; 

     for(int i = 0; i<files.size(); i++) { 
      if(files.get(i) != null) { 
       System.out.println("i: "+i+"\nFiltype: "+files.get(i).type()); 
       if(files.get(i).type().equals("image/jpeg") || files.get(i).type().equals("image/png")) { 
        picture = new Picture(project, title+"_bilde_"+(i+1), files.get(i)); 
        project.addPicture(picture); 
       } else { 
        error += "Fil nummer "+(i+1)+" er av typen "+files.get(i).type()+" og ikke av typen .JPG eller .PNG og ble dermed ikke lagt til. \n"; 
       } 
      } else { 
       error = "Ingen filer funnet"; 
      } 
     } 
    } else { 
     error = "Velg en tittel for bildene"; 
    } 
    if(error.equals("")) { 
     flash.success("Picture(s) added"); 
    } else { 
     flash.error(error); 
    } 
    addPicture(id); 
} 

उत्तर

3

यदि कोई कभी रुचि रखता है इस तरह काम करने के लिए मिल गया) अगर संभव हो तो।

+0

क्या आपने यह देखा: पी - http://stackoverflow.com/questions/7401364/multi-file-upload-with-play/7571000#7571000? – Rifat

+0

क्या आप अपना उत्तर स्वीकार कर सकते हैं? धन्यवाद। –

-1

<input type="file" multiple name="files" id="files"/> नहीं होना चाहिए: <input type="file multiple" name="files" id="files"/>

#{form @Projects.uploadPictures(project.id), enctype:'multipart/form-data'} 

<p> 
    <label>&{'title'}</label> 
    <input type="text" name="title"/> 
    <strong>(&{'addPicture.chooseTitle'})</strong> 
</p> 
<p> 
    <label>&{'Pictures'}</label> 
    <input type="file" multiple name="files" id="files"/> 
</p> 
<p> 
    <input type="submit" value="&{'publish'}" /> 
</p> 

#{/form} 

फ़ाइलों हैंडलिंग?

दूसरा, आप वास्तव में अपनी छवि कहां से सहेजते हैं? मुझे लगता है कि आपको इसे अपने लूप में सहेजना चाहिए, जहां आपने project.addPicture(picture); रखा है, लेकिन असल में ऐसा लगता है कि छवियों को आपकी पिछली पंक्ति में सिस्टम में सहेजा गया है: addPicture(id); इस तरह की व्याख्या बताती है कि यह एक ही छवि को क्यों बचाता है (अंतिम एक या पहला वाला (नहीं सुनिश्चित करें कि उन्हें कैसे पार्स किया गया है)) कई बार।

public static void uploadPictures(long id, String title, File fake) { 
    List<Upload> files = (List<Upload>) request.args.get("__UPLOADS"); 
    if(files != null) { 
     Project project = Project.findById(id); 
     Picture picture; 
     Blob image; 
     InputStream inStream; 
     for(Upload file: files) { 
      if(file != null) { 
       try { 
        inStream = new java.io.FileInputStream(file.asFile()); 
        image = new Blob(); 
        image.set(inStream, new MimetypesFileTypeMap().getContentType(file.asFile())); 
        picture = new Picture(project, file.getFileName(), image); 
        project.addPicture(picture); // stores the picture 
       } catch (FileNotFoundException e) { 
        System.out.println(e.toString()); 
       } 
      } 
     } 
    } 
    addPicture(id); //renders the image upload view 
} 

बजाय ("__ अपलोड" request.args.get करने की ब्लॉब ऑब्जेक्ट की श्रृंखला के साथ एक काम समाधान प्राप्त करने के लिए खुश हो सकते हैं:

+0

उत्तर के लिए धन्यवाद, लेकिन <इनपुट प्रकार = "फ़ाइल एकाधिक" नाम = "फ़ाइलें" आईडी = "फ़ाइलें" /> एकाधिक फ़ाइल अपलोड के रूप में प्रस्तुत नहीं किया गया था। project.add चित्र (चित्र) छवि को सहेजता है और जोड़ता है चित्र (आईडी) बस छवि अपलोड के लिए दृश्य प्रस्तुत करता है। कोई अन्य विचार? – vegardoj

+0

निश्चित रूप से नहीं। ['एकाधिक 'एक अलग विशेषता है] (http://www.w3.org/TR/html-markup/input.file.html#input.file.attrs.multiple) और' टाइप' के मान का हिस्सा नहीं है । –

2

तो तुम TypeBinder

इस के साथ

तो एक विशिष्ट प्ले करने के लिए एक परम के प्रसंस्करण बाध्य करने के लिए @As उपयोग कर सकते हैं:

public static void chargedMultiUpload(@As(binder = FileArrayBinder.class) Object xxx) throws IOException{ ... } 

और यह एचटीएमएल

<input type="file" multiple name="files" id="files"/> 

तो, आप फ़ाइल [] doo = (फ़ाइल []) xxx जैसे कुछ के साथ एक कलाकार बनाना है;

+1

आप अपना खुद का बांधने वाला बना सकते हैं ताकि नियंत्रक क्लीनर हो जाए –

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