如何配置jquery文件上传插件

时间:2015-05-29 18:57:22

标签: jquery jquery-file-upload

我正在尝试在rails上使用带有ruby的jquery file upload插件来上传文件。以下是我的目标。

  • 能够拖放多个文件

  • 我一次只能发送一个文件。我有10个文件意味着插件应该逐个发送文件名filedata。

  • 选择文件后,可以在发送到服务器之前将其删除。

  • 它应该显示文件上传进度

但是使用示例代码,当我尝试拖放文件时,它只向服务器发送一个文件,并且不在filePreview中显示文件名。如果启用了autoupload,则它将发送所有选定的文件。但它仍然没有在filePreview中显示文件名。要删除所选文件,我从here获得了建议。但点击开始上传按钮后,我收到javascript错误。它说“ncaught TypeError:无法读取未定义的属性'大小'”。请帮忙解决这个问题。提前谢谢。

示例代码在这里。

<%= javascript_include_tag 'application/jquery.ui.widget' %>
<%= javascript_include_tag 'application/jquery.iframe-transport' %>
<%= javascript_include_tag 'application/jquery.fileupload' %>
<script type="text/javascript">
    $('#filedata').fileupload({
        options: {
            singleFileUploads: false,
            sequentialUploads: true,
            autoUpload: false,
            dropZone: $('#file-form')
        },
        change: function (ev, data) {
            $.each(data.files, function (index, file) {
                alert('Selected file: ' + file.name);
                alert('Selected file size: ' + file.size);
                $("#filePreview").append(
                    $('<span>').text(file.name)
                    .append('<a class="removeButton" href="#"> <img src="/oldimages/note_deletebut.png"/> </a>')
                    .attr('id', 'fileSpan')
                    .append($('<br>'))
                );
            });
        },
        add: function (e, data) {
            $(".removeButton").click(function() {
               $(this).parent().remove();
               data.files.splice(0,1); //To test
            });
            $("#triggerUpload").off('click').on('click',function () {           
                data.submit();
            });
        },
        formData: {
        },
        url: "URL",
        done: function (e, data) {
            console.log("success")
            console.log(data.result)
        }
    });
</script>
<form id="file-form" enctype="multipart/form-data" method="post" name="fileinfo">
    <div class="upload-droparea fnt6c"> Drop files here<br>or <br>
        <span class="btn btn-default orngbtn lesbtn filesbg uplod-btn">
            <span>Select Files</span>
            <input type="file" id="filedata" name="filedata" multiple>
        </span>
    </div>
    <div id="filePreview"></div>
    <button id="triggerUpload" value="Start Upload" class="btn btn-default orngbtn lesbtn filesbg" type="button">Start Upload
    </button>
    <button data-dismiss="modal" id="cancelUpload" value="Cancel" class="btn btn-default orngbtn lesbtn filesbg" type="button">Cancel</button>
</form>

2 个答案:

答案 0 :(得分:0)

我遇到了同样的错误(在fileupload-ui.js的第116行)。我的模板中出现错误,导致索引多于添加的图片,导致数据元素未定义

答案 1 :(得分:-1)

我的模板看起来像这样:

&#13;
&#13;
{% for (var i=0, file; file=o.files[i]; i++) { %}
    <tr class="template-upload fade">
        <td rowspan="2" class="preview" style="width: 80px;">
			<span class="fade"></span>
		</td>
        <td class="name">
			<span>{%=file.name%}</span>
			<div class="start" style="display: none;">
			{% if (!o.options.autoUpload) { %}
                <button class="btn btn-primary">
                    <i class="icon-upload icon-white"></i>
                    <span>{%=locale.fileupload.start%}</span>
                </button>
            {% } %}
			</div>
		</td>
        <td class="size" width="100px" rowspan="2" valign="top"><span>{%=o.formatFileSize(file.size)%}</span></td>
        <td class="cancel" width="25px" rowspan="2" valign="top">
			{% if (!i) { %}
            <button class="btn btn-warning" style="border: none; background: none; cursor: pointer;">
                <i class="icon-ban-circle icon-white"></i>
                <span><img src="<?php echo targets; ?>admin/images/icon_del.png" /></span>
            </button>
			{% } %}
		</td>
    </tr>
	<tr class="template-upload fade" style="height: 35px;">
		<td valign="middle" align="center">
		{% if (file.error) { %}
			<span class="label label-important">{%=locale.fileupload.error%}</span> {%=locale.fileupload.errors[file.error] || file.error%}
        {% } else if (o.files.valid && !i) { %}
			<div class="progress progress-success progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
				<div class="bar" style="width:0%;">
				</div>
			</div>
        {% } else { %}
        {% } %}
		</td>
	</tr>
{% } %}
&#13;
&#13;
&#13;

正如你所看到的,我每个项目有2行(=图片),这导致错误......