【问题标题】:Multiple thumbnails before image upload图片上传前的多个缩略图
【发布时间】:2016-05-23 12:40:42
【问题描述】:

我在 Javascript/Jquery 方面非常缺乏经验,因此我使用 JavaScript Load Image plugin 来处理我的图像上传过程的前端。

问题:
我会喜欢上传多张图片,而不仅仅是一张,因此也想显示所有要上传为缩略图的图片。目前只有一张图片显示为缩略图。


The Fiddle:https://jsfiddle.net/r7s3n64b/1/(仅显示一张缩略图)


HTML (相关部分)

<!-- FILE INPUT -->
<p><input type="file" name="images[]" id="upload-post-images" multiple></p>

<!-- THUMBNAILS -->
<div id="result" class="result">
    <p>This only works in browsers with support for the <a href="https://developer.mozilla.org/en/DOM/window.URL">URL</a> or <a href="https://developer.mozilla.org/en/DOM/FileReader">FileReader</a> API.</p>
</div><br>

我尝试循环浏览要上传的图片:

replaceResults = function (img) {
        var content;
        var imageFiles = document.getElementById("upload-post-images"),
        filesLength = imageFiles.files.length;

        // Loop through the FileList and render image files as thumbnails.
        for (var i = 0; i < filesLength; i++) {
            if (!(img.src || img instanceof HTMLCanvasElement)) {
                content = $('<span>Die Bilddatei konnte nicht geladen werden.</span>');
            } else {
                content = $('<a target="_blank">').append(img)
                    .attr('download', currentFile.name)
                    .attr('href', img.src || img.toDataURL());
            }
            result.children().replaceWith(content);
            if (img.getContext) {
                actionsNode.show();
            }
        } // end for loop
    },

我会非常感谢任何形式的帮助!

=== E D I T ===

your fiddle 中,缩略图放置在结束表单标记之后:

 </form>
 <img src="blob:https%3A//fiddle.jshell.net/001bd1f5-1cce-4618-bc83-9c8bd24f9e90" width="200" height="150">
 <img src="blob:https%3A//fiddle.jshell.net/001bd1f5-1cce-4618-bc83-9c8bd24f9e90" width="200" height="150">

在我的项目中(使用您的代码),缩略图放置在结果 div 中:

<div id="result" class="result">
    <a target="_blank" download="image.jpg" href="data:image/png;base64,iVBO3sSxiFIz6LUNoB9b27d/p9/HzNSojY7M+FCmPOnGAsrVBWlKSGsSfG4GBNOzbIWtW38xtqwSLsTpzHF7/N4n7PwQgrIo5fh...></a>
    <canvas width="265" height="354"></canvas>
</div>


你有没有机会碰巧知道为什么会这样或者我可以如何改变它?!

非常感谢您的大力帮助!

【问题讨论】:

    标签: javascript jquery image thumbnails


    【解决方案1】:

    您需要将您的 on change 功能更改为:

    document.getElementById('upload-post-images').onchange = function (e) {
        for(i = 0; i<=e.target.files.length; i++)
        {
           loadImage(
              e.target.files[i],
              function (img) {
                  document.body.appendChild(img);
              },
              {maxWidth: 200} // Options
           );
        }
    };
    

    这里更新了 jsFiddle:https://jsfiddle.net/r7s3n64b/2/

    之前您的事件处理程序如下所示:

    document.getElementById('upload-post-images').onchange = function (e) {
        loadImage(
            e.target.files[0],
            function (img) {
                document.body.appendChild(img);
            },
            {maxWidth: 200} // Options
        );
    };
    

    因为这条线:

    e.target.files[0]
    

    你总是只从图像数组中传递一个图像(第一个)。

    享受吧! :)

    更新

    关于您的更新 - 所以基本上都是关于 loadImage 函数中的第二个参数。

    【讨论】:

    • 太棒了!那并没有解决我的问题,但至少现在我知道这部分应该可以工作。谢谢!
    • 我更新了我的问题。你有没有机会指出我正确的方向?非常感谢您的帮助!!
    • @kringeltorte 关于您在 jsFiddle 中的更新,定义了一些函数,如 replaceResults、displayImage 等。还有变量 var result = $('#result'),这是您的结果 div。在 jsfiddle 中没有使用这些功能,但我想在你的它们是。例如这一行: result.children().replaceWith(content);可能导致您的图像附加到 div 结果中。所以基本上都是关于 js fiddle 中 loadImage 函数的第二个参数:function (img) { document.body.appendChild(img); },
    • 不,img 是单个图像,您需要像在我更新的 jsFiddle 中那样循环执行 loadImage 函数
    • 查看我之前的评论。所以基本上 loadImage 函数只适用于一个 img 时间,但如果你想加载几个图像,请循环运行 loadImage 函数
    【解决方案2】:

    更改您的 upload-post-images 更改事件,如下所示。

    document.getElementById('upload-post-images').onchange = function (e) {
        $.each(e.target.files, function () {
            loadImage(
              this,
              function (img) {
                  document.body.appendChild(img);
              }, {
                  maxWidth: 200
              } // Options
            )
        });
    };
    

    UPDATED FIDDLE

    【讨论】:

    • 谢谢! Piotr Czarnecki 的速度更快,也更细致。因此我接受了他的回答。
    • 我编辑了我的问题。你有机会帮我吗?非常感谢您的帮助!!
    猜你喜欢
    • 2011-05-08
    • 2013-05-31
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 2016-05-24
    • 1970-01-01
    • 2015-09-22
    • 2011-10-30
    相关资源
    最近更新 更多