整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

HTML5实现大文件分片上传思路

TML5实现大文件分片上传思路,利用HTML5分片上传超大文件思路,WEBUPLOADER 支持 超大上G,多附件上传,JS 大文件分割/分片上传,百度WEBUPLOADER上传视频等大文件,WEBUPLOAD组件实现文件上传功能和下载功能,JS大文件切片上传,断点续传实现DEMO,前端上传大文件的解决方案,前端上传大文件处理(切片、断点续传),前端大文件上传优化方案——分片上传,vue大文件上传解决方案,vue大文件上传解决方案10G,vue大文件上传解决方案50G,vue大文件上传解决方案100G,html5如何实现大文件断点续传、秒传,

java如何实现大文件断点续传、秒传,SpringBoot如何实现大文件断点续传、秒传,SpringMVC如何实现大文件断点续传、秒传,SpringCloud如何实现大文件断点续传、秒传,

webuploader如何实现大文件断点续传、秒传,百度webuploader如何实现大文件断点续传、秒传,html5实现大文件断点续传、秒传,vue如何实现大文件断点续传、秒传,前端如何实现大文件断点续传、秒传,JavaScript如何实现大文件断点续传、秒传,

html5大文件断点续传、秒传解决方案,html5大文件断点续传、加密上传解决方案,html5大文件断点续传、加密存储解决方案,html5大文件断点续传分片解决方案,html5大文件断点续传分块解决方案,html5大文件断点续传分割解决方案,html5大文件断点续传切割解决方案,

在网上找过相关的资料,论坛里面也有网友交流过,但是都不太令人满意。

给政府做的一个项目。实际上客户那边对具体的技术实际不关心。

研发部门的同事调研过百度的webuploader这个组件,发现他实际上就是对Flash和HTML5进行了一个封装,本质还是调的HTML5的API,之前在项目中也用过,尝试过,但是最终都不太满意,一个是兼容性非常差,说的是兼容IE,但是在IE用的是Flash,在很多用户的电脑上用不了,卡顿崩溃发生的太频繁,文件上传的数量一多比如几千个,前端页面就开始卡了,用户体验非常差。这些问题研发部的同事都向百度反应过,但是百度webuploader那边一直没人回,基本上没人管,领导说要求付费提供技术支持,那边也是没人回,联系不上他们任何人。

webuploader这边连个开发人员都联系不到,这个是怎么回事?

搞的我们领导现在基本上不怎么考虑国内这些免费开源的项目,研发部门的同事称这些项目为免费坑人项目。

用户上传的文件比较大,有20G左右,直接用HTML传的话容易失败,服务器也容易出错,需要分片,分块,分割上传。也就是将一个大的文件分成若干个小文件块来上传,另外就是需要实现秒传功能和防重复功能,秒传就是用户如果上传过这个文件,那么直接在数据库中查找记录就行了,不用再上传一次,节省时间,实现的思路是对文件做MD5计算,将MD5值保存到数据库,算法可以用MD5,或者CRC,或者SHA1,这个随便哪个算法都行。

分片还需要支持断点续传,现在HTML5虽然提供了信息记录功能,但是只支持到了会话级,也就是用户不能关闭浏览器,也不能清空缓存。但是有的政府单位上传大文件,传了一半下班了,明天继续传,电脑一关结果进度信息就丢失了,这个是他们的一个痛点。

切片的话还有一点就是在服务器上合并,一个文件的所有分片数据上传完后需要在服务器端进行合并操作。

聊下HTML5吧,怎么说呢,HTML5也就是chrome提供的一个API来实现文件分片,反正基本的需求,小文件用是能用,但是用起来多多少少还是有点别扭,扩展性,安全性,稳定性用户那阵都不太满意,关键是什么,我们是没办法对HTML5进行扩展,个性化和定制化开发的,基本上被谷歌给限制死了,这也是现在国产化的意义,希望能够打破这个限制。不然公司的一些产品和业务不太好开展,总不能用户提个需求,我们就说谷歌Chrome没提供API,所我们就无法开发吧。这不是跟客户扯呢。

功能的话支持20G文件上传和续传,支持秒传,支持文件夹上传,支持在服务端保存文件夹层级结构,支持将文件夹层级结构信息保存到数据库中,支持下载时能够将文件夹层级结构下载下来,支持下载文件夹,下载文件夹支持断点续传,支持VUE2,VUE3,React,支持IE,Chrome和信创国产化环境,比如银河麒麟,统信UOS,龙芯,支持加密传输,包括加密上传,加密下载,加密算法支持国密SM4,支持云对象存储,比如华为云,阿里云,腾讯云,七牛云,AWS,MinIO,FastDFS,需要提供手机,QQ,微信,邮箱等联系方式,提供7*24小时技术支持,提供长期技术支持和维护服务,提供远程1对1技术指导,提供二次开发指导,提供文档教程,提供视频教程。1.下载示例

https://gitee.com/xproer/up6-vue-cli



将up6组件复制到项目中

示例中已经包含此目录



1.引入up6组件



2.配置接口地址

接口地址分别对应:文件初始化,文件数据上传,文件进度,文件上传完毕,文件删除,文件夹初始化,文件夹删除,文件列表

参考:http://www.ncmem.com/doc/view.aspx?id=e1f49f3e1d4742e19135e00bd41fa3de



3.处理事件



启动测试



启动成功



效果



数据库



源码工程文档:https://drive.weixin.qq.com/s?k=ACoAYgezAAw1dWofra

源码报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwoiul8gl

OEM版报价单:https://drive.weixin.qq.com/s?k=ACoAYgezAAwuzp4W0a

控件源码下载:https://drive.weixin.qq.com/s?k=ACoAYgezAAwbdKCskc

家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发,您的支持是我不断创作的动力。

今天给大家带来的主题是HTML5 和word的互相转化,话不多说,直接进入正题!

1.HTML转化为Word之 html-docx-js

1.1 什么是 html-docx-js

html-docx-js 是一个非常小的库,能够将 HTML 文档转换为 Microsoft Word 2007 及更高版本使用的 DOCX 格式。 html-docx-js 设法使用称为“altchunks”的功能在浏览器中执行转换。 简而言之,它允许以不同的标记语言嵌入内容。 开发者使用 MHT 文档将嵌入内容发送到 Word,因为它允许处理图像。 Word 打开此类文件后,会将外部内容转换为 Word Processing ML(这是 DOCX 文件的标记语言的调用方式)并替换引用。

Microsoft Word for Mac 2008 不支持 Altchunk,LibreOffice 和 Google Docs 也不支持 Altchunk。

关于 html-docx-js 库有几点需要说明:

  • html-docx-js 适用于任何支持 Blob 的现代浏览器(无论是本机还是通过 Blob.js)。它在 Google Chrome 36、Safari 7 和 Internet Explorer 10 上进行了测试,也适用于使用 Buffer 而不是 Blob 的 Node.js(在 v0.10.12 上测试)。
  • html-docx-js 仅支持内联的 base64 图像(通过 DATA URI 获取)。 但动态转换常规图像(来自静态文件夹)很容易,开发者可以自行完成。

目前 Mammoth 在 Github 上通过 MIT 协议开源,有超过 1k 的 star、0.3k 的 fork、0.7k 的项目依赖量、NPM 周平均下载量 9k,是一个值得关注的前端开源项目。

1.2 如何使用 html-docx-js

var converted = htmlDocx.asBlob(content);
saveAs(converted, "test.docx");

asBlob 可以采用其他选项来控制文档的页面设置:

  • orientation:横向或纵向(默认)
  • margins:边距大小图
  • top:数字(默认:1440,即 2.54 厘米)
  • right:数字(默认:1440)
  • bottom:数字(默认:1440)
  • left:数字(默认:1440)
  • header:数字(默认值:720)
  • footer:数字(默认值:720)
  • gutter:数字(默认值:0)

比如下面的例子:

var converted = htmlDocx.asBlob(content, {
  orientation: "landscape",
  margins: { top: 720 },
});
saveAs(converted, "test.docx");

需要注意的是,开发者需要传递完整、有效的 HTML(包括 DOCTYPE、html 和 body 标签)。 这可能不太方便,但可以让开发者在样式标签中包含 CSS 规则。

html-docx-js 作为独立”Browserify 模块(UMD)分发。 开发者可以将其作为 html-docx 要求。 如果没有可用的模块加载器,它将把自己注册在 window.htmlDocx。

2.mammoth.js

2.1 什么是 mammoth.js

Mammoth.js 旨在转换 .docx 文档,例如:由 Microsoft Word、Google Docs 和 LibreOffice 创建的文档,并将其转换为 HTML。 Mammoth 的目标是通过使用文档中的语义信息并忽略其他细节来生成简单且干净的 HTML。 例如,Mammoth 将任何具有标题 1 样式的段落转换为 h1 元素,而不是尝试精确复制标题的样式(字体、文本大小、颜色等)。

.docx 使用的结构与 HTML 的结构之间存在很大的不匹配,这意味着对于更复杂的文档来说,转换不太可能完美。 如果开发者仅使用样式来对文档进行语义标记,那么 Mammoth 效果最佳。

Mammoth.js 目前支持以下功能:

  • 标题、列表、评论
  • 从自己的 docx 样式到 HTML 的可定制映射。 例如,可以通过提供适当的样式映射将 warningHeading 转换为 h1.warning。
  • Tables: 当前忽略表格本身的格式(例如:边框),但文本的格式与文档其余部分的格式相同。
  • 脚注和尾注、图片、粗体、斜体、下划线、删除线、上标和下标、链接、Line、Line breaks
  • 文本框:文本框的内容被视为出现在包含文本框的段落之后的单独段落。

Mammoth 在众多平台可用,比如:Python、WordPress、Java/JVM、.NET 等等。目前 Mammoth 在 Github 上通过 BSD-2-Clause 开源,有超过 4.1k 的 star、0.5k 的 fork、4.4k 的项目依赖量、NPM 周平均下载量 76k,是一个值得关注的前端优质开源项目。

2.2 使用 mammoth.js

以文档转换为例。

Mammoth 允许在转换文档之前对其进行处理。 例如,假设该文档尚未进行语义标记,但开发者知道任何居中对齐的段落都应该是标题,则可以使用 transformDocument 参数来适当地修改文档:

function transformElement(element) {
  if (element.children) {
    var children = _.map(element.children, transformElement);
    element = { ...element, children: children };
  }
  if (element.type === "paragraph") {
    element = transformParagraph(element);
  }

  return element;
}
function transformParagraph(element) {
  if (element.alignment === "center" && !element.styleId) {
    return { ...element, styleId: "Heading2" };
  } else {
    return element;
  }
}
var options = {
  transformDocument: transformElement,
};

TransformDocument 的返回值在 HTML 生成期间使用。同时,上面的代码可以使用 mammoth.transforms.paragraph 函数进行优化,比如:

function transformParagraph(element) {
  if (element.alignment === "center" && !element.styleId) {
    return { ...element, styleId: "Heading2" };
  } else {
    return element;
  }
}
var options = {
  transformDocument: mammoth.transforms.paragraph(transformParagraph),
};

或者,如果开发者希望已明确设置为使用等宽字体来表示代码的段落:

const monospaceFonts = ["consolas", "courier", "courier new"];

function transformParagraph(paragraph) {
  var runs = mammoth.transforms.getDescendantsOfType(paragraph, "run");
  var isMatch =
    runs.length > 0 &&
    runs.every(function (run) {
      return run.font && monospaceFonts.indexOf(run.font.toLowerCase()) !== -1;
    });
  if (isMatch) {
    return {
      ...paragraph,
      styleId: "code",
      styleName: "Code",
    };
  } else {
    return paragraph;
  }
}
var options = {
  transformDocument: mammoth.transforms.paragraph(transformParagraph),
  styleMap: ["p[style-name='Code'] => pre:separator('\n')"],
};

关于 Mammoth 库的更多用法,更多 API 示例可以参考文末资料,本文不再过多展开。

3.本文总结

本文主要和大家介绍 HTML5 和word互转的两个开源库,分别为:html-docx-js、mammoth.js。相信通过本文的阅读,大家对 html-docx-js、mammoth.js 会有一个初步的了解。

因为篇幅有限,关于 html-docx-js、mammoth.js 的更多用法和特性文章并没有过多展开,如果有兴趣,可以在我的主页继续阅读,同时文末的参考资料提供了大量优秀文档以供学习。最后,欢迎大家点赞、评论、转发、收藏,您的支持是我不断创作的动力。

参考资料

https://github.com/evidenceprime/html-docx-js

https://github.com/mwilliamson/mammoth.js

https://www.npmjs.com/package/html-docx-js

https://www.npmjs.com/package/mammoth

https://www.tutorialswebsite.com/export-html-to-word-document-with-javascript/

https://www.vecteezy.com/vector-art/136754-free-vector-documents

残酷的移动互联网竞争环境下,HTML5技术一直受到各方关注,“HTML5颠覆原生App”的争论也从未停止过,不管怎样HTML5生态的构建方兴未艾。不过对于移动开发者来说更关心的问题是如何低成本、周期短开发出体验效果好的App,所以当下用HTML5远比赌HTML5更现实。于是,一个一直被提及但是从没有占据过统治地位的概念又一次走进了移动开发者们的视野,那就是跨平台开发。

AD:WOT2015互联网运维与开发者大会热销抢票

目前国内外已经有很多基于HTML5的跨平台开发工具,你并不需要任何的原生应用编程经验,你只需要一些HTML的相关知识,懂一些CSS和JavaScript,运用工具中所提供的各种丰富的功能模块,便可在很短时间内完成App的开发而且让你的App具备完美的原生体验。

推荐几款跨平台工具

1、Appcelerator

Appcelerator的Titanium开发平台使开发者可以通过HTML、PHP、JavaScript、Ruby、Python等Web编程语言开发手机、平板和桌面的原生App。其优势在于它可以让用户轻松地访问超过300个API以及定位信息。

此外,Appcelerator提供针对特定行为或事件定制的统计。App的数据既可储存在云端,也可储存在设备上。

2、APICloud

APICloud是一款“云端一体”的移动开发平台,信仰“云端一体”的理念,重新定义了移动应用开发。APICloud为开发者从“云”和“端”两个方向提供API,简化移动应用开发技术,让移动应用的开发周期从一个月缩短到7天。APICloud由“云API”和“端API”两部分组成,可以帮助开发者快速实现移动应用的开发、测试、发布、管理和运营的全生命周期管理。

2、PhoneGap

PhoneGap是一个免费且开源的开发环境,使开发者可以开发出在Android、Palm、黑莓、iPhone、iTouch及iPad等设备上运行的App。其使用的是HTML和JavaScript等标准的Web开发语言。开发者使用PhoneGap进行开发,可调用加速计、GPS/定位、照相机、声音等功能。

PhoneGap还提供Adobe AIR App以及在线的培训课程,帮助开发者了解原生API并在他们自己的平台上开发移动App。

4、NativeScript

NativeScript是使用移动平台的JavaScript引擎来进行跨平台开发。逻辑部分自然无需多说,关键在于如何使用平台特性。NativeScript是通过反射得到所有平台API,预编译它们,然后将这些API注入到JavaScript运行环境,接下来在Javascript调用后拦截这个调用,并运行native代码。NativeScript是使用大量web开发的技巧来进行app开发,因为工具链和语言都非常熟悉受到了很多前端开发者的欢迎。

5、Kinvey

Kinvey同样是一个为移动应用开发者提供后台创建服务的平台。Kinvey强调加速移动应用开发与销售的“即取即用”理念。Kinvey的中间层与数据层均托管在多个云服务提供商处,包括Rackspace、Amazon与Microsoft。所有通过Kinvey存储的数据都会有四种方式备份:Amazon EC2、Windows Azure、Rackspace以及Kinvey自己的服务器,假如其中一两个出现了故障,用户的数据依然安然无恙。

总结:

关于HTML5和原生App的争论一直在继续,不论最后谁能取胜,开发者更关心App的开发速度和最终体验。合理的使用工具会让开发效率大大提升,甚至达到事半功倍的效果,希望能有一款适合您。

期待未来有一天,App开发可以像在纸上画画一样简单。

声明:IT之家网站刊登/转载此文出于传递更多信息之目的,并不意味着赞同其观点或论证其描述。