Changeset 25 for trunk/grails-app


Ignore:
Timestamp:
Mar 31, 2011, 12:07:02 PM (8 years ago)
Author:
robert@…
Message:

Implemented uploadify as upload tool

Location:
trunk/grails-app
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/grails-app/conf/BaseFilters.groovy

    r20 r25  
    3636                                }
    3737                               
     38                                // File uploads don't occur in a session, since the flash script can't
     39                                // continue the session. For that reason, all uploads are allowed.
     40                                if( actionName == "upload" && controllerName == "file" ) {
     41                                        return true;
     42                                }
     43                               
    3844                                if( !ConfigurationHolder.config.gscf.baseURL ) {
    3945                                        throw new Exception( "No GSCF instance specified. Please check configuration." )
  • trunk/grails-app/controllers/nl/tno/metagenomics/files/FileController.groovy

    r22 r25  
    1818
    1919import org.codehaus.groovy.grails.commons.ConfigurationHolder
     20import org.springframework.web.multipart.MultipartHttpServletRequest
    2021import grails.converters.*
    2122import org.apache.commons.io.IOUtils;
     
    180181
    181182        protected def moveUploadedFile(File absolutePath ) {
    182                 PrintWriter writer = null;
    183                 InputStream is = null;
    184                 FileOutputStream fos = null;
    185 
    186                 try {
    187                         writer = response.getWriter();
    188                 } catch (IOException ex) {
    189                         log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
    190                 }
    191 
    192                 String filename = request.getHeader("X-File-Name");
     183                if( !( request instanceof MultipartHttpServletRequest ) ) {
     184                        response.setStatus( response.SC_BAD_REQUEST );
     185                        log.error( "Request for file upload is not multipart: " + params );
     186                        return [];
     187                }
     188               
     189                MultipartHttpServletRequest mpr = (MultipartHttpServletRequest) request;
     190                def uploadedFile = mpr.getFile( 'Filedata' )
     191               
     192                String filename = uploadedFile.getOriginalFilename();
    193193
    194194                // URL decode the filename
     
    198198                String newFilename = fileService.getUniqueFilename( filename, absolutePath );
    199199                try {
    200                         is = request.getInputStream();
    201                         fos = new FileOutputStream(new File(absolutePath, newFilename));
    202                         IOUtils.copy(is, fos);
     200                        uploadedFile.transferTo( new File( absolutePath, newFilename ) );
     201
    203202                        response.setStatus(response.SC_OK);
     203                       
    204204                        return [ 'success': true, 'filename': newFilename ]
    205                 } catch (FileNotFoundException ex) {
     205                } catch (Exception ex) {
     206                        log.error( "Fileupload has thrown an exception: " + ex.getMessage());
     207
    206208                        response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
    207                         log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
    208 
    209209                        return [ 'success': false ]
    210                 } catch (IOException ex) {
    211                         response.setStatus(response.SC_INTERNAL_SERVER_ERROR);
    212                         log(OctetStreamReader.class.getName() + "has thrown an exception: " + ex.getMessage());
    213 
    214                         return [ 'success': false ]
    215                 } finally {
    216                         try {
    217                                 fos.close();
    218                                 is.close();
    219                         } catch (IOException ignored) {
    220                         }
    221210                }
    222211        }
  • trunk/grails-app/taglib/nl/tno/metagenomics/UploadTagLib.groovy

    r9 r25  
    1515        def fileUpload = { attrs ->
    1616                def multiple = attrs.multiple ?: false;
    17                
    18                 out << '<div id="upload_field_container_' + attrs.name + '"  class="upload_field_container upload_field_container_' + ( multiple ? 'multiple' : 'single' ) + '">';
    19                 out << '<div id="upload_field_' + attrs.name + '"  class="upload_field"></div>';
     17                out << '<div class="uploadContainer" id="uploadcontainer_' + attrs.name + '">'
     18                out << '<div class="files">'
    2019                out << '<div id="' + attrs.name + 'Example" class="upload_info"></div>';
    2120                out << '<a id="' + attrs.name + 'DeleteExisting" class="upload_del" href="#" onClick="if( confirm( \'Are you sure to delete this file?\' ) ) { deleteFileExisting( \'' + attrs.name + '\' ); } return false;"><img src="' + resource( dir: 'images/icons', file: 'delete.png', plugin: 'famfamfam' ) + '"></a>';
    2221                out << '<a id="' + attrs.name + 'DeleteUploaded" class="upload_del" href="#" onClick="if( confirm( \'Are you sure to delete this file?\' ) ) { deleteFileUploaded( \'' + attrs.name + '\' ); } return false;"><img src="' + resource( dir: 'images/icons', file: 'delete.png', plugin: 'famfamfam' ) + '"></a>';
     22                out << '</div>'
     23                out << '<input type="file" name="ajaxupload_' + attrs.name + '" id="upload_field_' + attrs.name + '" />'
    2324                out << '<script type="text/javascript">';
    24                 out << '  $(document).ready( function() { ';
     25                out << '  $(function() { ';
    2526                out << '    var filename = "' + ( attrs.value ?: '' ) + '";';
    2627                out << '    fileUploadField( "' + attrs.name + '", ' + ( multiple ? 'true' : 'false' ) + ( attrs.onUpload ? ', function(params) { ' + attrs.onUpload + '(params); }' : '' ) + ( attrs.onDelete ? ', function(params) { ' + attrs.onDelete + '(params); }' : '' ) + ');';
    2728                out << '    if( filename != "" ) {';
    2829                out << '      $("#' + attrs.name + 'DeleteExisting").show();';
    29                 out << '      $("#' + attrs.name + 'Example").html("Current file: " + createFileHTML( filename ) )';
     30                out << '      $("#' + attrs.name + 'Example").html("Current file: " + createFileHTML( filename ) );';
     31                out << '      $("#uploadcontainer_' + attrs.name + ' .files").show();';
    3032                out << '    }';
    3133                out << '  } );';
    3234                out << "</script>\n";
    33                
     35
    3436                // Show a custom list when uploading multiple files
    3537                if( multiple ) {
    36                         out << '<ul class="multipleFiles"></ul>';
     38                        out << '<ul class="files"></ul>';
    3739                } else {
    3840                        out << '<input type="hidden" name="' + attrs.name + '" id="' + attrs.name + '" value="' + attrs.value + '">';
     
    4042
    4143                out << '</div>';
     44               
    4245        }
     46       
     47//      def fileUpload = { attrs ->
     48//              def multiple = attrs.multiple ?: false;
     49//             
     50//              out << '<div id="upload_field_container_' + attrs.name + '"  class="upload_field_container upload_field_container_' + ( multiple ? 'multiple' : 'single' ) + '">';
     51//              out << '<div id="upload_field_' + attrs.name + '"  class="upload_field"></div>';
     52//              out << '<div id="' + attrs.name + 'Example" class="upload_info"></div>';
     53//              out << '<a id="' + attrs.name + 'DeleteExisting" class="upload_del" href="#" onClick="if( confirm( \'Are you sure to delete this file?\' ) ) { deleteFileExisting( \'' + attrs.name + '\' ); } return false;"><img src="' + resource( dir: 'images/icons', file: 'delete.png', plugin: 'famfamfam' ) + '"></a>';
     54//              out << '<a id="' + attrs.name + 'DeleteUploaded" class="upload_del" href="#" onClick="if( confirm( \'Are you sure to delete this file?\' ) ) { deleteFileUploaded( \'' + attrs.name + '\' ); } return false;"><img src="' + resource( dir: 'images/icons', file: 'delete.png', plugin: 'famfamfam' ) + '"></a>';
     55//              out << '<script type="text/javascript">';
     56//              out << '  $(document).ready( function() { ';
     57//              out << '    var filename = "' + ( attrs.value ?: '' ) + '";';
     58//              out << '    fileUploadField( "' + attrs.name + '", ' + ( multiple ? 'true' : 'false' ) + ( attrs.onUpload ? ', function(params) { ' + attrs.onUpload + '(params); }' : '' ) + ( attrs.onDelete ? ', function(params) { ' + attrs.onDelete + '(params); }' : '' ) + ');';
     59//              out << '    if( filename != "" ) {';
     60//              out << '      $("#' + attrs.name + 'DeleteExisting").show();';
     61//              out << '      $("#' + attrs.name + 'Example").html("Current file: " + createFileHTML( filename ) )';
     62//              out << '    }';
     63//              out << '  } );';
     64//              out << "</script>\n";
     65//             
     66//              // Show a custom list when uploading multiple files
     67//              if( multiple ) {
     68//                      out << '<ul class="multipleFiles"></ul>';
     69//              } else {
     70//                      out << '<input type="hidden" name="' + attrs.name + '" id="' + attrs.name + '" value="' + attrs.value + '">';
     71//              }
     72//
     73//              out << '</div>';
     74//      }
    4375
    4476        /**
  • trunk/grails-app/views/assay/show.gsp

    r24 r25  
    1616                <g:javascript src="enterTagsDialog.js" />
    1717
    18                 <g:javascript src="fileuploader.new.js" />
    1918                <g:javascript src="fileuploads.new.js" />
    2019               
  • trunk/grails-app/views/layouts/main.gsp

    r15 r25  
    2222                <script type="text/javascript" src="${resource(dir: 'js', file: 'paginate.js')}"></script>
    2323                <script type="text/javascript" src="${resource(dir: 'js', file: 'forms.js')}"></script>
     24               
     25        <!--  Uploadify -->
     26            <link href="${resource(dir: 'uploadify', file: 'uploadify.css')}" type="text/css" rel="stylesheet" />
     27            <script type="text/javascript" src="${resource(dir: 'uploadify', file: 'swfobject.js')}"></script>
     28            <script type="text/javascript" src="${resource(dir: 'uploadify', file: 'jquery.uploadify.v2.1.4.min.js')}"></script>
    2429               
    2530                <g:layoutHead/>
  • trunk/grails-app/views/run/_addFilesDialog.gsp

    r7 r25  
    77                        Select sequence and quality files to upload. It is possible to zip the files before upload.
    88                </p>
    9                 <g:fileUpload name="sequencefiles" value="" multiple="${true}" onUpload="handleFileUploadData" onDelete="deleteProcessButton"/>
     9                <g:fileUpload name="sequencefiles" value="" multiple="${true}" onUpload="handleFileUploadData" onDelete="deleteProcessButton" />
    1010        </g:form>
    1111</div>
  • trunk/grails-app/views/run/index.gsp

    r18 r25  
    66                <g:javascript src="run.index.runDialog.js" />
    77
    8                 <g:javascript src="fileuploader.new.js" />
    98                <g:javascript src="fileuploads.new.js" />
    109
  • trunk/grails-app/views/run/show.gsp

    r24 r25  
    1919                <g:javascript src="assay.show.showRunDialog.js" />
    2020
    21                 <g:javascript src="fileuploader.new.js" />
    2221                <g:javascript src="fileuploads.new.js" />
    2322               
Note: See TracChangeset for help on using the changeset viewer.