jQuery fileupload用php加载和删除数据库中的文件

时间:2018-01-10 15:38:28

标签: javascript php jquery

我正在使用jquery插件blueimp / jQuery-File-Upload并一直在通过演示并将其实施到我们的网站中。我虽然有一些问题。基本上我试图提供一种允许多个附件到网络表单的方法。

我正在提交上传,将文件位置和唯一代码存储在数据库中并获得成功的响应,我在响应中包含文件对象中的唯一代码,我在模板中看到了这个和已经能够将其作为文本输入包含在内,以确认它是否有效。

我想上传附件,然后当我点击发送按钮时,我想提交带有附件代码的表单。

所以第一个问题是我希望能够删除这些文件并传递代码,以便可以同时从数据库中删除它们。如何为每个特定按钮将此数据发送到服务器?

接下来,当我刷新页面时,我正在加载目录中的所有文件,如何从我的数据库加载列表,基本上是什么函数加载此列表?

最后,有没有更好的内置方式来做到这一点?

谢谢,

斯图

编辑:

这是我的自定义'模板下载'脚本,与演示的唯一区别在于我包含一个带有返回的唯一代码值的隐藏输入。我知道这是返回代码,当我从隐藏输入更改为文本时,我可以看到代码。

<script id="template-download" type="text/x-tmpl">
{% for (var i=0, file; file=o.files[i]; i++) { %}
    <tr class="template-download fade">
        <td>
            <span class="preview">
                {% if (file.thumbnailUrl) { %}
                    <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" data-gallery><img src="{%=file.thumbnailUrl%}"></a>
                {% } %}
            </span>
        </td>
        <td>
            <p class="name">
                {% if (file.url) { %}
                    <a href="{%=file.url%}" title="{%=file.name%}" download="{%=file.name%}" {%=file.thumbnailUrl?'data-gallery':''%}>{%=file.name%}</a>
                {% } else { %}
                    <span>{%=file.name%}</span>
                {% } %}
            </p>
            {% if (file.error) { %}
                <div><span class="label label-danger">Error</span> {%=file.error%}</div>
            {% } %}
        </td>
        <td>
            <span class="size">{%=o.formatFileSize(file.size)%}</span>
        </td>
        <td>
            {% if (file.deleteUrl) { %}
                <button class="btn btn-danger delete" data-type="{%=file.deleteType%}" data-url="{%=file.deleteUrl%}&code={%=file.unique_code%}"{% if (file.deleteWithCredentials) { %} data-xhr-fields='{"withCredentials":true}'{% } %}>
                    <i class="glyphicon glyphicon-trash"></i>
                    <span>Delete</span>
                </button>
                <input type="hidden" name="attachs[]" value="{%=file.unique_code%}"/>
                <input type="checkbox" name="delete" value="1" class="toggle">
            {% } else { %}
                <button class="btn btn-warning cancel">
                    <i class="glyphicon glyphicon-ban-circle"></i>
                    <span>Cancel</span>
                </button>
            {% } %}
        </td>
    </tr>
{% } %}
</script>

对于我的第一个问题,我使用了一个很好的解决方法,我不会将附件绑定到webform(排队的电子邮件),直到我提交整个表单。所以这个问题就解决了。

第二个问题仍然是个问题。我目前正在使用class CustomUploadHandler extends UploadHandler {扩展UploadHandler类,并具有自定义handle_file_uploadget_file_objects函数以及新的get_filenames函数。这些都在下面。

protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
        $index = null, $content_range = null) {
    $file = parent::handle_file_upload(
        $uploaded_file, $name, $size, $type, $error, $index, $content_range
    );
    // $file->unique_code = 'test';
    $file->unique_code = random_string(32);
    if (empty($file->error)) {
        $email_date = array();
        $email_date['filename'] = $file->name;
        $email_date['size'] = $file->size;
        $email_date['type'] = $file->type;
        $email_date['unique_code'] = $file->unique_code;

        db_insert($this->table, $email_date);
    }
    return $file;
}

protected function get_file_objects($iteration_method = 'get_file_object') {
    if(isset($_POST['email_id'])):
        return array_values(array_filter(array_map(
            array($this, $iteration_method),
            $this->get_filenames($_POST['email_id'])
        )));
    else:
        return array();
    endif;
}

protected function get_filenames($email_id){
    $query = 'SELECT filename FROM '.$this->table.' WHERE eid = '.$email_id;
    $rows = db_array($query);
    $files = array();
    foreach($rows as $row ):
        $files[] = $row['filename'];
    endforeach;
    return $files;
}

0 个答案:

没有答案