4

我正在尝试使用jQuery File Upload插件以 ajax 形式上传一些文件。我正在尝试遵循“基本”插件的说明,但文档有点稀疏。

我看不到任何创建“开始上传”按钮的方法。我也不太明白如何为单个上传设置进度条。我看到我可以data.contextadd回调中进行设置,但是如果其中有多个文件,这将如何工作data.files

4

1 回答 1

3

所有标记都必须包含在表单中,这是表单的标记。

<form id="fileupload" action="/path/to/your/controller/ext" method="POST" type="multiplart/form-data">...everything below this goes in here </form>

这是用于创建“开始上传”按钮的标记。

<button class="btn btn-primary start" type="submit">
    <span>Start upload</span>
</button>

这是创建“添加文件”按钮的标记。

<span class="btn btn-success fileinput-button">
   <span>Add files...</span>
   <input type="file" multiple="" name="files[]">
</span>

这是创建“取消上传”按钮的标记。

<button class="btn btn-warning cancel" type="reset">
    <span>Cancel upload</span>
</button>

这是创建“删除”按钮的标记。

<button class="btn btn-danger delete" type="button">
    <span>Delete</span>
</button>

这是显示单个文件进度的标记。每个文件都是同步处理的,这意味着这个进度条将始终显示文件的进度currently queued file.

<div class="span5 fileupload-progress fade">
    <!-- The global progress bar -->
    <div aria-valuemax="100" aria-valuemin="0" role="progressbar" class="progress progress-success progress-striped active">
        <div style="width:0%;" class="bar"></div>
    </div>
    <!-- The extended global progress information -->
    <div class="progress-extended">&nbsp;</div>
</div>

这是用于在处理文件数据时保存文件数据的 HTML。

<table class="table table-striped" role="presentation">
    <tbody data-target="#modal-gallery" data-toggle="modal-gallery" class="files"></tbody>
 </table>

您可以看到这是一个标准的“提交”按钮。它将用于处理我们的表单。当您单击它时,表单将尝试上传所有文件部分。

进度条的 HTML,如上面的代码所假定的那样。

<div id="progress">
    <div class="bar" style="width: 0%;"></div>
</div>

$(function () {
    $('#fileupload').fileupload({
        dataType: 'json',
        done: function (e, data) {
            $.each(data.result, function (index, file) {
                $('<p/>').text(file.name).appendTo(document.body);
             });
        },
        progressall: function (e, data) {
           var progress = parseInt(data.loaded / data.total * 100, 10);
           $('#progress .bar').css(
               'width',
               progress + '%'
           );
        }
   });
});

根据该站点,每个 javascript 文件都会提交有关其功能和要求的评论。让我们分解一下

jQuery

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
//We need the jQuery core. No need for an explanation.

jQuery UI Widget 贯穿始终,如果**我们还没有包含 jQuery UI 核心或 jQuery UI.widget 核心,我们必须包含它们

<!-- The jQuery UI widget factory, can be omitted if jQuery UI is already included -->
<script src="js/vendor/jquery.ui.widget.js"></script>

有一个模板工厂插件用于在您将元素拖放/添加到列表时自动生成元素。你会想要包括这个。

<!-- The Templates plugin is included to render the upload/download listings -->
<script src="http://blueimp.github.com/JavaScript-Templates/tmpl.min.js"></script>

您希望能够调整大小和预览图像吗?我打赌你会

<!-- The Load Image plugin is included for the preview images and image resizing functionality -->
<script src="http://blueimp.github.com/JavaScript-Load-Image/load-image.min.js"></script>

这是为了 HTML5 Canvas 到 Blob 的支持。它保持与上述类似的功能,但是对于 HTML5 上传是必需的。

<!-- The Canvas to Blob plugin is included for image resizing functionality -->
<script src="http://blueimp.github.com/JavaScript-Canvas-to-Blob/canvas-to-blob.min.js"></script>

下一个非常不言自明,我们不需要这些,但他将它们用于演示。

<!-- Bootstrap JS and Bootstrap Image Gallery are not required, but included for the demo -->
<script src="http://blueimp.github.com/cdn/js/bootstrap.min.js"></script>
<script src="http://blueimp.github.com/Bootstrap-Image-Gallery/js/bootstrap-image-gallery.min.js"></script>

如果浏览器不支持 XHR 文件上传,那么我们在后台使用 iFrame 来模拟该功能。您需要它来支持浏览器。

<!-- The Iframe Transport is required for browsers without support for XHR file uploads -->
<script src="js/jquery.iframe-transport.js"></script>

其余的是与插件本身相关的核心文件。

<!-- The basic File Upload plugin -->
<script src="js/jquery.fileupload.js"></script>

<!-- The File Upload file processing plugin -->
<script src="js/jquery.fileupload-fp.js"></script>

<!-- The File Upload user interface plugin -->
<script src="js/jquery.fileupload-ui.js"></script>

下一个不是那么自我解释。本地化处理语言差异化。

<!-- The localization script -->
<script src="js/locale.js"></script>

最后,这是我们土豆的肉。Main.js 处理我们所有的脚本执行和条件化。这是您要熟悉的文件。如果您检查他们的页面,您会看到正在发生的一切。一个简单的复制+粘贴就足够了;但是,您需要更改此脚本中的 URL 值以匹配您计划使用的服务器。

<!-- The main application script -->
<script src="js/main.js"></script>

祝你好运。

于 2012-08-06T17:35:02.757 回答