Changeset 1103 in main


Ignore:
Timestamp:
05/15/12 15:01:53 (7 years ago)
Author:
zali
Message:

file upload : multiple files upload added

Location:
trunk/openPLM
Files:
3 added
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/openPLM/plmapp/controllers/document.py

    r1088 r1103  
    157157        if settings.MAX_FILE_SIZE != -1 and f.size > settings.MAX_FILE_SIZE: 
    158158            raise ValueError("File too big, max size : %d bytes" % settings.MAX_FILE_SIZE) 
    159          
     159 
    160160        f.name = f.name.encode("utf-8") 
    161  
    162161        if self.has_standard_related_locked(f.name): 
    163162            raise ValueError("Native file has a standard related locked file.") 
     
    165164        f.seek(0, os.SEEK_END) 
    166165        doc_file = models.DocumentFile.objects.create(filename=f.name, size=f.tell(), 
    167                         file=models.docfs.save(f.name,f), document=self.object)                                      
     166                        file=models.docfs.save(f.name,f), document=self.object)  
    168167        self.save(False) 
    169168        # set read only file 
  • trunk/openPLM/plmapp/filehandlers/progressbarhandler.py

    r1098 r1103  
    33from django.core.files.uploadedfile import * 
    44 
    5 #import string 
    6 #import random 
    7  
    8 #def gen_id: 
    9 #    """ 
    10 #    Generate random id for temporary file name 
    11 #    """ 
    12 #    chars_id = string.ascii_letters + string.digits 
    13 #    return "".join(random.choice(chars_id) for x in xrange(50)) 
    14  
    15 #data={} 
    165 
    176class ProgressBarUploadHandler(FileUploadHandler): 
     
    2413    def __init__(self, *args, **kwargs): 
    2514        super(ProgressBarUploadHandler, self).__init__(*args, **kwargs) 
    26         self.progress_id = None 
     15        self.progress_id = {} 
    2716 
    2817    def new_file(self,file_name, *args, **kwargs): 
     
    3019        Create the file object to append to as data is coming in. 
    3120        """ 
    32         self.progress_id = self.request.GET['X-Progress-ID'] 
     21        #self.progress_id = self.request.GET['X-Progress-ID'] 
     22        self.progress_id["%s" % args[0]]=self.request.GET["%s" % args[0]] 
    3323        super(ProgressBarUploadHandler, self).new_file(file_name, *args, **kwargs) 
    34         self.file = ProgressUploadedFile(self.progress_id,self.file_name, self.content_type, 0, self.charset) 
     24        self.file = ProgressUploadedFile(self.progress_id["%s" % args[0]],self.file_name, self.content_type, 0, self.charset) 
     25        #self.file = ProgressUploadedFile(self.progress_id,self.file_name, self.content_type, 0, self.charset) 
    3526 
    3627    def receive_data_chunk(self, raw_data, start): 
     
    3829     
    3930    def file_complete(self, file_size): 
    40         self.file.seek(0) 
    41         self.file.size = file_size 
    42         return self.file 
     31        self.file.seek(0) 
     32        self.file.size = file_size 
     33        return self.file 
    4334 
    4435    def upload_complete(self): 
  • trunk/openPLM/plmapp/models.py

    r1023 r1103  
    9090from django.contrib.auth.models import User, Group 
    9191from django.core.files.storage import FileSystemStorage 
    92 from django.utils.encoding import iri_to_uri 
     92from django.utils.encoding import iri_to_uri, force_unicode 
    9393from django.utils.translation import ugettext_lazy as _ 
    9494from django.utils.translation import ugettext_noop 
     
    842842        return path 
    843843 
     844 
     845 
    844846#: :class:`DocumentStorage` instance which stores files in :const:`settings.DOCUMENTS_DIR` 
    845847docfs = DocumentStorage(location=settings.DOCUMENTS_DIR) 
  • trunk/openPLM/plmapp/views/main.py

    r1098 r1103  
    978978        if add_file_form.is_valid(): 
    979979            obj.add_file(request.FILES["filename"]) 
    980             return HttpResponseRedirect(".") 
     980            return HttpResponseRedirect(obj.plmobject_url + "files/") 
    981981    else: 
    982982        add_file_form = forms.AddFileForm() 
     
    998998        add_file_form = forms.AddFileForm(request.POST, request.FILES) 
    999999        if add_file_form.is_valid(): 
    1000             obj.add_file(request.FILES["filename"]) 
     1000            for fkey, f in request.FILES.iteritems(): 
     1001                obj.add_file(request.FILES[fkey]) 
    10011002            return HttpResponse(".") 
    10021003 
     
    10141015    if len(f) > 0: 
    10151016        ret = str(os.path.getsize(f[0])) 
    1016     if ret==request.GET['f_size']: 
    1017         ret += ":linking" 
    1018     else: 
    1019         ret += ":writing" 
     1017    if ret=="": 
     1018        ret="0 : waiting" 
     1019    else: 
     1020        if ret==request.GET['f_size']: 
     1021            ret += ":linking" 
     1022        else: 
     1023            ret += ":writing" 
    10201024    return HttpResponse(ret) 
    10211025 
  • trunk/openPLM/templates/documents/files_add.html

    r1096 r1103  
    44<!-- Manage html display in the Content div which correspond to the "doc-cad" menu + "add new"--> 
    55 
    6 {% block scripts %} 
    7 <script> 
    8 /*var nbr_files=0; 
    9 function new_input_file(){ 
    10     var table = $("#fileupload > table.Content"); 
    11     var num = nbr_files+1; 
    12     var input = "<tr><th><label for='id_filename"+num+"'>Filename:</label></th><td><input type='file' name='filename"+num+"' id='id_filename"+num+"'/ ></td></tr>"; 
    13     table.prepend(input); 
    14 } 
    15  
    16 function add_file(input){ 
    17     if (nbr_files==0) 
    18         $("#div_files").removeChild($("#div_files").firstChild()); 
    19     //create where the progress of the upload will be display for this input 
    20     var check_id="check"; 
    21     if (nbr_files>0) 
    22         check_id+=nbr_files; 
    23     var file_line = $("<p><input type='checkbox' id='"+check_id+"'/"+"></p>"); 
    24     var file_name = this.value; 
    25     file_line.append(file_name); 
    26  
    27     //create link to delete this file from the queue for upload 
    28     var link = $("<a href='#'></a>"); 
    29     var del_img = "<img src='/media/img 
    30 } 
    31  
    32 function del_file(input){ 
    33 }*/ 
    34  
    35 //generate random id to get the upload progress 
    36 function gen_uuid() { 
    37     var uuid = ""; 
    38     for (var i=0; i < 32; i++) { 
    39         uuid += Math.floor(Math.random() * 16).toString(16);  
    40     } 
    41     return uuid; 
    42 } 
    43  
    44 //return percentage of the progress 
    45 function progress_bar(uploaded, total){ 
    46     var progress_w = uploaded * 100/total; 
    47     return progress_w; 
    48 } 
    49  
    50 //return an XMLHttpRequest 
    51 function getXHR(){ 
    52     var xhr=null; 
    53          
    54     if (window.XMLHttpRequest || window.ActiveXObject) { 
    55         if (window.ActiveXObject) { 
    56             try { 
    57                 xhr = new ActiveXObject("Msxml2.XMLHTTP"); 
    58             } catch(e) { 
    59                 xhr = new ActiveXObject("Microsoft.XMLHTTP"); 
    60             } 
    61         } else { 
    62                 xhr = new XMLHttpRequest();  
    63         } 
    64     } else { 
    65         alert("Votre navigateur ne supporte pas l'objet XMLHTTPRequest..."); 
    66         return null; 
    67     } 
    68  
    69     return xhr; 
    70 } 
    71  
    72 //get a unique and available path name for the selected file 
    73 function get_path_name(){ 
    74     var file_form = $('form#fileupload')[0]; 
    75     var file_liste=file_form.elements["filename"].files; 
    76     var file=file_liste[0]; 
    77     totalsize=file.size; 
    78     f_name=file.name; 
    79     var xhr1=getXHR(); 
    80     var action = location.href; 
    81     action = action.split("?")[0]; 
    82     action +="?f_name="+f_name+"&f_size="+totalsize; 
    83     xhr1.open("GET",action,false); 
    84     xhr1.onreadystatechange = function() { 
    85         if(xhr1.readyState == 4) { 
    86             /*paths[f_name]={ 
    87                 'path': xhr1.responseText, 
    88                 'size': totalsize 
    89             };*/ 
    90             path = xhr1.responseText; 
    91         } 
    92     } 
    93     xhr1.send(null); 
    94 } 
    95  
    96 function upload_end(){ 
    97     var div_text = $("#progress_div").text(); 
    98     return ((div_text=="")||(div_text.substr(0,3)=="100")||(totalsize==0)||(uploaded==totalsize)); 
    99 } 
    100 var t; 
    101 //id generated for the uploaded file not use any more 
    102 var id ; 
    103 //size of the selected file 
    104 var totalsize=0; 
    105 //name of the selected file 
    106 var f_name =""; 
    107 var uploaded=0; 
    108 var path=""; 
    109 //Array that contains path and size of eache files selected for upload 
    110 //var files_info=new Array(); 
    111 var go_to =""; 
    112  
    113 $(function(){ 
    114     var xhr = getXHR(); 
    115     $("input[type='file']").change(function (){ 
    116         //add_file(this); 
    117         id=gen_uuid(); 
    118     }); 
    119     $("input[name='_undo']").click(function(){ 
    120         xhr.abort(); 
    121     }); 
    122     $("#_up").click(function(){ 
    123         //get_path_name(); 
    124         var go_to=""; 
    125         //var xhr=getXHR(); 
    126         var file_form = $('form#fileupload')[0]; 
    127         var new_action = file_form.action; 
    128         new_action = new_action.replace("/files/add","/files/up"); 
    129         new_action +="?X-Progress-ID="+id; 
    130         function update_progress_info() { 
    131             if(upload_end()==false){ 
    132                 var xhr2=getXHR(); 
    133                 var action = location.href; 
    134                 action = action.split("?")[0]; 
    135                 action=action.replace("/files/add","/files/_up"); 
    136                 //action+="?f_path="+path; 
    137                 action+="?X-Progress-ID="+id; 
    138                 action+="&f_size="+totalsize; 
    139                 xhr2.open("GET",action,true); 
    140                 xhr2.onreadystatechange = function() { 
    141                     if((xhr2.readyState == 4)&&(xhr2.status!=500)) { 
    142                         var response=xhr2.responseText; 
    143                         uploaded = parseInt(response.split(":")[0]); 
    144                         var f_status = response.split(":")[1]; 
    145                         var percent =progress_bar(uploaded,totalsize); 
    146                         if(isNaN(percent)==false){ 
    147                             var aux_per=""+percent; 
    148                             if (aux_per.split(".").length>1) 
    149                                 aux_per=aux_per.split(".")[0]+"."+aux_per.split(".")[1].substr(0,2); 
    150                             $("#up_progress").text(aux_per+"%"); 
    151                         } 
    152                         if(f_status=="linking"){ 
    153                             var text=$("#up_progress").text(); 
    154                             var evol = text.split("%")[0]; 
    155                             if(isNaN(percent)) 
    156                                 $("#up_progress").text("100%"+"(link in creation)"); 
    157                             else 
    158                                 $("#up_progress").text(evol+"%(link in creation)"); 
    159                         } 
    160                     } 
    161                 } 
    162                 xhr2.send(null); 
    163                 //if(uploaded!=totalsize) 
    164             } 
    165             t=window.setTimeout(update_progress_info, 1000); 
    166             if(go_to!="") 
    167                 location.href=go_to; 
    168         }; 
    169         t=window.setTimeout(update_progress_info, 1000); 
    170         xhr.onreadystatechange = function() { 
    171             if(xhr.readyState == 4) { 
    172                 go_to = location.href; 
    173                 go_to = go_to.replace("/files/add","/files"); 
    174             } 
    175         } 
    176         xhr.open("POST", new_action,true); 
    177         data = new FormData(file_form); 
    178         data.append("X-Progress-ID",id); 
    179         xhr.send(data); 
    180         var file_liste=file_form.elements["filename"].files; 
    181         var file=file_liste[0]; 
    182         f_name=file.name; 
    183         var file_name = $("<span id='file_name'></span>"); 
    184         var file_progress=$("<span id='up_progress'>0%</span>"); 
    185         file_name.text(f_name+":"); 
    186         $("#progress_div").append(file_name); 
    187         $("#progress_div").append(file_progress); 
    188         $("#progress_div").append("<img src='/media/img/loading.gif' alt='loading' style='float:left;'>"); 
    189         totalsize=file.size; 
    190     }); 
    191 }); 
    192 </script> 
    193 {% endblock %} 
    194  
    1956{% block css %} 
    196 <style type="text/css"> 
    197 </style> 
     7<link type="text/css" href="/media/css/files.css" rel="Stylesheet" />  
    1988{% endblock %} 
    1999 
     
    20414    {% endwith %} 
    20515<!--</form>--> 
    206 <form id="link" method="post" action=".">{% csrf_token %} 
    207 </form> 
    208  
    209 <div id="progress_div"></div> 
    210 <div id="test_req"></div> 
     16<noscript> 
     17    <div style="width:30%;" class="warning"> 
     18        You can only upload one file at a time.<br> 
     19        Use the "Validate" button to send your file. 
     20    </div> 
     21</noscript> 
     22<form class="form_queue">{% csrf_token %}</form> 
     23<!--<div id="hidden_forms" style="display:none;"></div>--> 
     24<div id="div_files"></div> 
     25<script type="text/javascript" src="/media/js/file.js"></script> 
    21126{% endblock %} 
    21227 
  • trunk/openPLM/templates/snippets/undo_form.html

    r1088 r1103  
    1313            <td> 
    1414                {% if form.is_multipart %} 
     15                <noscript> 
     16                    <input type="submit" class="{{"Button"|button}}" value="{% trans "Validate" %}" name="_validate"/> 
     17                </noscript> 
    1518                <input type="button" class="{{"Button"|button}}" value="{% trans "Upload" %}" id="_up"/> 
    1619                <!--<input type="button" class="{{"Button"|button}}" value="{% trans "Delete" %}" id="_delete"/>--> 
Note: See TracChangeset for help on using the changeset viewer.