Как загрузить файл (csv или текст) и прочитать содержимое в фреймворке Zope

У меня есть веб-страница, которую пользователи должны использовать для загрузки содержимого CSV в базу данных MySQL. Как мне получить содержимое с помощью внешнего метода и вставить его в базу данных?

Сначала у меня есть форма, которую пользователи используют для загрузки файлов:

<form role="form" action="scripts/processUpload" method="post" enctype="multipart/form-data">
    <div class="form-group">
        <input type="file" class="form-control" name="file_name" id="file_name" accept=".csv,.txt">
        <input type="hidden" name="type_of_upload" value="cell_line">
    </div>
    <button type="submit" class="btn btn-primary" style="align-content:center" id="i_submit">Upload</button>
    <script>
        $('#i_submit').click(function () {
            //check whether browser fully supports all File API
            if (window.File && window.FileReader && window.FileList && window.Blob) {
                //get the file size and file type from file input field
                var fsize = $('#file_name')[0].files[0].size;
                var ftype = $('#file_name')[0].files[0].type;
                var fname = $('#file_name')[0].files[0].name;

                if (fsize > 5242880) //do something if file size more than 5 mb (1048576)
                {
                    alert("Type :" + ftype + " | " + fsize + " bites\n(File: " + fname + ") Too big!");
                }
            } else {
                alert("Please upgrade your browser, because your current browser lacks some new features we need!");
            }
        });

        $('#i_submit').click(function () {
            //check whether browser fully supports all File API
            if (window.File && window.FileReader && window.FileList && window.Blob) {
                //get the file size and file type from file input field
                var fsize = $('#file_name')[0].files[0].size;
                var ftype = $('#file_name')[0].files[0].type;
                var fname = $('#file_name')[0].files[0].name;
                //alert(ftype)
                switch (ftype) {
                    case 'application/vnd.ms-excel':
                    case 'text/plain':
                        //alert("Acceptable image file!");
                        break;
                    default:
                        alert('Unsupported File format!');
                }

            } else {
                alert("Please upgrade your browser, because your current browser lacks some new features we need!");
            }
        });
    </script>
</form>

Часть скрипта procesUpload показана ниже, я использую запрос для получения файла:

data=context.fileReader(data_file=context.REQUEST.file_name.name)
print data
return printed

FileReader — это внешний метод, который принимает файл данных и должен читать его содержимое:

def readFiles(data_file):
    with open(data_file,'r') as f:
        data=f.readlines()
        for line in data:
            words = line.split(",")
            data_read.append(words)
    return data_read

Но после всего этого я получаю:

Error Type: IOError
Error Value: (13, 'Permission denied'),

Может ли кто-нибудь с опытом загрузки и чтения содержимого загруженного файла в Zope помочь?


person David    schedule 19.12.2014    source источник


Ответы (1)


Решение на самом деле не нуждалось во внешнем методе, я сделал это с помощью одной строки в сценарии, чтобы прочитать содержимое загруженного файла следующим образом;

uploaded_data=context.REQUEST.get('uploaded_file').readlines()
person David    schedule 29.12.2014