# File lib/s3/right_s3_interface.rb, line 397
        def put(bucket, key, data=nil, headers={})
            # On Windows, if someone opens a file in text mode, we must reset it so
            # to binary mode for streaming to work properly
            if (data.respond_to?(:binmode))
                data.binmode
            end
            data_size = data.respond_to?(:lstat) ? data.lstat.size :
                    (data.respond_to?(:size) ? data.size : 0)
             if (data_size >= USE_100_CONTINUE_PUT_SIZE)
                headers['expect'] = '100-continue'
            end
            req_hash = generate_rest_request('PUT', headers.merge(:url=>"#{bucket}/#{CGI::escape key}", :data=>data,
                                                                  'Content-Length' => data_size.to_s))
            request_info(req_hash, RightHttp2xxParser.new)
        rescue
            on_exception
        end