图片上传前的多个缩略图

Multiple thumbnails before image upload

本文关键字:略图      更新时间:2023-09-26

我对Javascript/Jquery非常缺乏经验,因此我使用JavaScript加载图像插件来处理图像上传过程的前端。

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


小提琴:https://jsfiddle.net/r7s3n64b/1/(仅显示一个缩略图(


网页(相关部分(

<!-- 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 ===

在您的小提琴中,缩略图放置在结束表单标签之后:

 </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>


你有没有可能碰巧知道为什么会这样,或者我该如何改变?!

非常感谢您的巨大帮助!

您需要将更改函数更改为:

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 函数中的第二个参数。

更改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
        )
    });
};

更新的小提琴