当前位置:首页 > 技术 > 正文内容

基于FineUploader的图片上传实现方案

访客 技术 2026年9月29日 9

在Web应用中,通过FineUploader组件结合MVC与Ajax技术可高效完成图片上传功能。以下为具体实现步骤。

引入必要资源

<link href="@Url.Content("~/Scripts/uploader/fine-uploader.min.css")" rel="stylesheet" />
<script src="@Url.Content("~/Scripts/uploader/fine-uploader.min.js")"></script>

前端HTML结构

<div id="triggerUpload">
    <a href="javascript:void(0);">
        <img src="@Url.Content("~/Content/img/default-thumb.png")" alt="点击上传" />
    </a>
    <span style="color: #999;">封面图</span>
</div>

<div class="preview-panel" id="imagePreview" style="display:none; right:25px;">
    <div class="mask-layer"></div>
    <div class="preview-content">
        <h2 id="previewTitle">图像预览</h2>
        <div class="preview-area">
            <img id="previewTarget" style="width: 175px;" src="@Model.Thumbnail" alt="预览" />
            <input type="hidden" id="imagePath" value="" />
        </div>
        <div class="action-buttons">
            <p><a href="javascript:void(0)" id="removeImage">移除</a></p>
        </div>
    </div>
</div>

JavaScript初始化逻辑

$(function() {
    var currentImageUrl = "";

    $("#triggerUpload").on("click", function() {
        initUploader(this);
    });

    $("#removeImage").on("click", removeSelectedImage);

    function initUploader(target) {
        const config = {
            element: target,
            request: { endpoint: '/api/upload/temp-image' },
            text: {
                uploadButton: "更换封面",
                dragZone: "拖拽上传",
                dropProcessing: "正在处理..."
            },
            template: `
                <div class="uploader-container">
                    <span>{dragZoneText}</span>
                    <button class="upload-btn">{uploadButtonText}</button>
                    <ul class="file-list"></ul>
                </div>`,
            multiple: false,
            validation: { allowedExtensions: ['jpg', 'jpeg', 'png', 'gif'] },
            callbacks: {
                onComplete: function(id, name, result) {
                    if (result.success) {
                        currentImageUrl = result.path;
                        $("#previewTarget").attr("src", result.path + "?size=T116x170");
                        $("#imagePath").val(currentImageUrl);
                        $("#imagePreview").fadeIn(300);
                        adjustPreviewSize('#imagePreview', 211, 1280);
                    } else {
                        alert("上传失败,请稍后再试。");
                    }
                }
            }
        };

        new qq.FineUploader(config);
    }

    function removeSelectedImage() {
        $.post("/api/upload/remove-temp", { path: currentImageUrl })
            .done(function(res) {
                if (res === "OK") {
                    currentImageUrl = "";
                    $("#imagePreview").fadeOut(300);
                    $("#previewTarget").attr("src", "");
                    $("#imagePath").val("");
                } else {
                    alert("删除失败");
                }
            })
            .fail(function() {
                alert("网络异常,请重试");
            });
    }
});

服务端路由配置(web.config)

<system.webServer>
  <handlers>
    <add name="TempImageHandler" 
         verb="*" 
         path="/api/upload/temp-image" 
         type="YourApp.Handlers.TempImageUploadHandler, YourApp" />
  </handlers>
</system.webServer>

服务端需实现对应的HTTP处理器以接收并存储上传文件,此处省略具体实现。

相关文章

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

linux screen 用法详情 (nohup 的替代方案)

一、screen 是什么?能干嘛?screen 是一个终端复用器,可以:在一个 SSH 会话中开多个“虚拟终端”SSH 断线后,程序仍然在后台运行随时重新连接到原来的会话特别适合:nohup 的替代方案跑脚本 / 爬虫 / 训练模型运维、远程开发二、安装 screen# CentOS / Rocky / Almayum install -y screen# Debian / Ubuntuapt i...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。