flashupload 参数

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 参数 正文

Flash 技术早已被淘汰,主流浏览器(如 Chrome、Firefox、Edge、Safari)已经默认禁用了 Flash 插件。flashupload 这个组件在现代 Web 开发中几乎不再使用

flashupload 参数
(图片来源网络,侵删)

为了知识完整性,或者如果您在维护一个非常老旧的项目,下面我将详细解释其工作原理和核心参数。

flashupload 是什么?

flashupload 通常是一个基于 Adobe Flash 技术开发的文件上传组件,它的主要优势(在当年)是:

  1. 多文件上传:可以一次性选择多个文件进行上传,而无需使用 HTML4 <input type="file"> 的重复。
  2. 上传进度显示:可以实时显示每个文件的上传进度条。
  3. 拖拽上传:支持将文件拖拽到上传区域进行上传。
  4. 更好的样式控制:开发者可以自定义上传按钮和界面的外观,而不受浏览器原生控件的限制。

核心工作原理

flashupload 的工作流程通常如下:

  1. 嵌入 Flash:在 HTML 页面中,使用 <object><embed> 标签将一个 SWF 文件(Flash 程序)嵌入到页面的指定位置。
  2. JavaScript 通信:页面上的 JavaScript 代码通过 ExternalInterface API 与这个 SWF 文件进行通信。
    • 调用 Flash:JS 可以调用 Flash 内部定义的函数,browse()(打开文件选择对话框)、upload()(开始上传)、clear()(清空列表)。
    • Flash 回调 JS:Flash 在执行过程中(如文件选择完成、上传进度、上传成功或失败)会调用 JS 中预先定义好的回调函数,并将数据(如文件名、大小、进度百分比)传递给 JS。
  3. 后端交互:Flash 内部使用 FileReference.upload() 方法将文件数据通过 HTTP POST 请求发送到服务器指定的 URL。

主要参数解析

参数通常分为两部分:SWF 文件初始化参数JavaScript 接口参数

SWF 初始化参数

这些参数是在嵌入 SWF 时传递给 Flash 程序的,通常定义了 Flash 的基本行为。

参数名 类型 描述 示例
upload_url String 必需,服务器端接收文件上传的脚本地址。 "upload.php"
file_post_name String 上传文件时,表单中 inputname 属性,后端通过此名获取文件。 "file_data"
post_params Object 非常重要,随文件一起提交到服务器的额外参数,通常是一个键值对对象。 { "uid": 123, "type": "avatar" }
file_types String 允许用户选择的文件类型过滤器,格式为 "描述扩展名*扩展名"。 "Images (*.jpg; *.gif)\*.jpg; *.gif"
file_size_limit String 单个文件大小的限制,可以是数字(单位字节)或带单位的字符串(如 "10MB", "500KB")。 "5MB"
use_query_string Boolean 是否将 post_params 的参数附加到 URL 的查询字符串中,而不是放在 POST 请求体里,默认为 false true
http_success Array 定义哪些 HTTP 状态码被认为是“成功”的,默认只有 [200],如果后端在某些情况下返回 201 或 204 表示成功,可以在这里添加。 [200, 201, 204]
queue_complete_handler String JS 回调函数名,当所有文件在队列中上传完成后,调用的 JS 函数名。 "onAllUploadsComplete"
upload_progress_handler String JS 回调函数名,当某个文件的上传进度更新时,调用的 JS 函数名。 "onUploadProgress"
upload_error_handler String JS 回调函数名,当某个文件上传失败时,调用的 JS 函数名。 "onUploadError"
upload_success_handler String JS 回调函数名,当某个文件上传成功时,调用的 JS 函数名。 "onUploadSuccess"

JavaScript 接口参数与方法

这些是你在页面上通过 JavaScript 调用和控制 Flash 组件的方法。

初始化方法

通常在页面加载完成后,调用一个初始化函数来设置好所有回调。

function initUploader() {
    // 假设 Flash 的 ID 是 "myFlashUpload"
    var uploader = document.getElementById("myFlashUpload");
    // 设置回调函数
    uploader.queue_complete_handler = "onAllUploadsComplete";
    uploader.upload_progress_handler = "onUploadProgress";
    uploader.upload_error_handler = "onUploadError";
    uploader.upload_success_handler = "onUploadSuccess";
}

核心控制方法

方法名 描述 示例
browse() 打开系统的文件选择对话框,让用户选择文件,选择后,文件会进入上传队列。 uploader.browse();
upload() 开始上传队列中的所有文件。 uploader.upload();
cancel(fileId) 取消上传队列中指定 ID 的文件。 uploader.cancel('file_123');
stop() 停止所有正在进行的上传。 uploader.stop();
clearQueue() 清空上传队列,移除所有已选择的文件。 uploader.clearQueue();
getFile(fileId) 根据文件 ID 获取队列中文件的信息对象。 var file = uploader.getFile('file_123');
getQueue() 获取当前上传队列中所有文件的信息数组。 var queue = uploader.getQueue();

回调函数

这些函数由 Flash 在特定事件触发时调用,你需要在全局作用域中定义它们。

// 当单个文件上传成功时被调用
// event: 包含 file, serverData, 等
function onUploadSuccess(event) {
    console.log("文件 " + event.file.name + " 上传成功!");
    console.log("服务器返回: " + event.serverData);
    // 可以在这里更新页面,比如显示缩略图
}
// 当单个文件上传进度更新时被调用
// event: 包含 file, loaded, total, percent
function onUploadProgress(event) {
    var percent = Math.round(event.percent);
    console.log("文件 " + event.file.name + " 上传进度: " + percent + "%");
    // 可以在这里更新进度条
}
// 当单个文件上传失败时被调用
// event: 包含 file, errorCode, message
function onUploadError(event) {
    console.error("文件 " + event.file.name + " 上传失败: " + event.message);
}
// 当队列中所有文件都上传完成时被调用
function onAllUploadsComplete() {
    console.log("所有文件上传完毕!");
}

现代替代方案

由于 Flash 已死,现代 Web 开发中应使用以下技术替代 flashupload

  1. HTML5 File API:这是最核心的替代方案。

    • <input type="file" multiple>:原生支持多文件选择。
    • FileReader API:用于读取文件内容(如预览图片)。
    • FormData 对象:用于将文件和表单数据打包,通过 XMLHttpRequestfetch 发送到服务器。
    • XMLHttpRequest.upload.onprogress:可以方便地监听上传进度。
  2. 成熟的 JavaScript 上传库:这些库封装了复杂的细节,提供了更强大的功能。

    • Plupload:一个非常经典和强大的多运行时上传器,支持 HTML5, Flash, Silverlight, Gears 等作为“运行时”,可以优雅地降级,即使现在,它也是一个很好的选择。
    • Dropzone.js:专注于拖拽上传,非常易用,开箱即用。
    • Uploadify:一个基于 jQuery 的上传组件,功能丰富,有免费和商业版本。
    • tus.io:一个基于 HTTP 的、可恢复的、开源的文件上传协议,特别适合大文件上传。
特性 flashupload (旧) 现代方案 (HTML5 + JS库)
技术基础 Adobe Flash HTML5 File API, JavaScript
浏览器兼容性 ,依赖已淘汰的插件 ,所有现代浏览器都支持
安全性 较差,Flash 本身有很多安全漏洞 高,在沙箱环境中运行
功能 基本功能(多文件、进度、拖拽) 功能更强大,如分片上传、断点续传、图片压缩等
易用性 需要嵌入 SWF,配置复杂 API 友好,封装完善,易于集成
未来 已死,不推荐使用 主流,是当前和未来的标准

如果您正在开发新项目,请务必选择现代的 HTML5 + JavaScript 库方案,如果您在维护旧项目,可以考虑将其逐步迁移到新的技术栈上。

-- 展开阅读全文 --
头像
iPhone X参数具体有哪些?
« 上一篇 今天
宏碁switch 10拆机教程
下一篇 » 51分钟前

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]