上传组件

上传说明

  • 我们操作的所有上传都会存放到 public 入口目录下
  • 一般情况下 图库选择 的模式就可以满足我们日常的附件管理需求
  • 临时上传的案例在后台的文章管理中有应用场景, 请自行查看在考虑使用
目录说明
public/locals本地存放路径,此路径下内容不需要同步到OSS对象存储
public/storage如果启用了云存储,请把此目录下内容迁移到云存储中
public/temporary临时存储,请在入库是从此目录中移走,因为此目录随时会被清理

注意

  • 请重点留意 HTML代码中有 class="builder ..." 的那行
  • 图库选择: class="builder layui-auto"
  • 临时上传: class="builder layui-auto-call"
  • PS: 这便是两种模式的由来, 有call 和 无 call的区别

临时上传

提示

  • 此处的“ builder layui-auto-call ”是触发关键
  • 此处代表着点击后弹出文件选择框上传文件
  • PS: 这样上传的文件会上传到 public/temporary 临时目录
<!-- 新增案例 -->
<div class="layui-form-item">
    <label class="layui-form-label">封面:</label>
    <div class="layui-input-block">
        <div class="thumbnail" data-type="image" data-limit="1">
            <div class="musters"></div>
            <div class="builder layui-auto-call">
                <i class="layui-icon layui-icon-camera"></i>
                <p>上传封面</p>
            </div>
        </div>
    </div>
</div>

<!-- 编辑案例 -->
<div class="thumbnail" data-type="image" data-limit="1">
    <div class="musters">
        {if $detail.image}
        <div class="preview">
            <input type="hidden" name="image" value="{$detail.image}">
            <i class="layui-icon layui-icon-close"></i>
            <img src="{$detail.image}" alt="img">
        </div>
        {/if}
    </div>
    <div class="builder layui-auto-call {if $detail.image}layui-hide{/if}">
        <i class="layui-icon layui-icon-camera"></i>
        <p>上传封面</p>
    </div>
</div>

图库上传

提示

  • 从图库从选择一张或多张图片或视频
<!-- 新增案例 -->
<div class="layui-form-item">
    <label class="layui-form-label">封面:</label>
    <div class="layui-input-block">
        <div class="thumbnail" data-type="image" data-limit="1">
            <div class="musters"></div>
            <div class="builder layui-auto">
                <i class="layui-icon layui-icon-camera"></i>
                <p>图库选择</p>
            </div>
        </div>
    </div>
</div>

<!-- 编辑案例 -->
<div class="thumbnail" data-type="image" data-limit="1">
    <div class="musters">
        {if $detail.image}
        <div class="preview">
            <input type="hidden" name="image" value="{$detail.image}">
            <i class="layui-icon layui-icon-close"></i>
            <img src="{$detail.image}" alt="img">
        </div>
        {/if}
    </div>
    <div class="builder layui-auto {if $detail.image}layui-hide{/if}">
        <i class="layui-icon layui-icon-camera"></i>
        <p>上传封面</p>
    </div>
</div>

多样上传

提示

  • 以下方式可以支持“临时上传”“图库选择”
  • PS: 一般情况下建议只使用一种模式就好了
<!-- 新增案例 -->
<div class="layui-form-item">
    <label class="layui-form-label">封面:</label>
    <div class="layui-input-block">
        <div class="thumbnail" data-type="image" data-limit="1">
            <div class="musters"></div>
            <div class="builder">
                <i class="layui-icon layui-icon-camera"></i>
                <p>上传封面</p>
                <div class="mask">
                    <div class="item layui-auto">图库选择</div>
                    <div class="item layui-auto-call">本地上传</div>
                </div>
            </div>
        </div>
    </div>
</div>

<!-- 编辑案例 (注意替换字段类型) -->
<div class="layui-form-item">
    <label for="image" class="layui-form-label">封面:</label>
    <div class="layui-input-block">
        <div class="thumbnail" data-type="image" data-limit="1">
            <div class="musters">
                {if $detail.image}
                <div class="preview">
                    <input type="hidden" id="image" name="image" value="{$detail.image}">
                    <i class="layui-icon layui-icon-close"></i>
                    <img src="{$detail.image}" alt="img">
                </div>
                {/if}
            </div>
            <div class="builder {if $detail.image}layui-hide{/if}">
                <i class="layui-icon layui-icon-camera"></i>
                <p>上传封面</p>
                <div class="mask">
                    <div class="item layui-auto">图库选择</div>
                    <div class="item layui-auto-call">本地上传</div>
                </div>
            </div>
        </div>
    </div>
</div>

图标显示

  • 如果你上传的是一个文件 或者 是一个非图片的内容
  • 您可以使用 to_ext_icon($url) 此参数进行图标显示
  • 只要把你文件路径传入它会根据你的扩展名称返回对应的图标
// 以下是示例
<div class="preview">
    <img src="{:to_ext_icon($detail.image)}" alt="img">
</div>

参数说明

名称默认说明
data-typeimage代表上传的类型: image/video/package/document
data-fieldimage代表表单的字段名称
data-limit1限制上传的数量
data-watertrue是否开启图片水印
上次更新:
贡献者: zero, windy, windy