コード例 #1
0
ファイル: test_files.py プロジェクト: boothead/karl
 def _callFUT(self, fieldstorage):
     from karl.content.views.files import get_upload_mimetype
     return get_upload_mimetype(fieldstorage)
コード例 #2
0
ファイル: imagedrawer.py プロジェクト: boothead/karl
def drawer_upload_view(context, request,
                       check_upload_size=check_upload_size,
                       get_image_info=get_image_info,
                       batch_images=batch_images,
                       ):
    """Drawer posts a file with the parameter name "file".
    """

    ## XXX The rest is copied from add_file_view. A common denominator
    ## would be desirable.

    creator = authenticated_userid(request)

    fieldstorage = request.params.get('file')
    if not hasattr(fieldstorage, 'filename'):
        msg = 'You must select a file before clicking Upload.'
        return dict(error = msg)

    stream = fieldstorage.file
    title = fieldstorage.filename
    image = create_content(ICommunityFile,
                          title=title,
                          stream=stream,
                          mimetype=get_upload_mimetype(fieldstorage),
                          filename=fieldstorage.filename,
                          creator=creator,
                          )
    check_upload_size(context, image, 'file')

    if hasattr(context, 'get_attachments'):
        target_folder = context.get_attachments()
        if not has_permission('create', target_folder, request):
            msg = 'You do not have permission to upload files here.'
            return dict(error=msg)

        # For file objects, OSI's policy is to store the upload file's
        # filename as the objectid, instead of basing __name__ on the
        # title field).
        filename = basename_of_filepath(fieldstorage.filename)
        image.filename = filename
        name = make_name(target_folder, filename, raise_error=False)
        if not name:
            msg = 'The filename must not be empty'
            return dict(error=msg)

        # Is there a key in context with that filename?
        if name in target_folder:
            msg = 'Filename %s already exists in this folder' % filename
            return dict(error=msg)

        target_folder[name] = image

    else:
        tempfolder = find_tempfolder(context)
        tempfolder.add_document(image)

    workflow = get_workflow(ICommunityFile, 'security', context)
    if workflow is not None:
        workflow.initialize(image)

    # Update the thumbnails
    return dict(
        upload_image_info=get_image_info(image, request),
        images_info=batch_images(context, request),
    )