WebUploader - 分片上传

WebUploader之前端大文件分片上传 WebUploader之单个大文件分片上传(前端实现) 1、组件简介 webuploader(官方定义):是一个以 HTML5 为主, Flash为辅的文件上传组件,采用大文件分片/并发上传的方式,极大地提高了文件上传的效率,同时兼容多种浏览器版本; 链接: WebUploader官网. 2、前端代码实现 首先,下载组件,并引入到项目文件; import WebUploader from "web... 阅读详情

在开发过程中遇到需要上传大文件的需求,但是大文件整个上传会导致服务器内存爆炸。

分片上传的思路

利用blob.slice()方法,根据指定的分片大小对文件进行切割,然后对切割得到的分片分开上传,上传可以指定并发数。服务器接受到所有分片之后,在把所有分片按照正确的顺序合并成完整的文件。

实现

由于实现过程中,后端开发懒得去判断分片是否全部上传完毕,需要前端在分片全部上传完之后在发送一个请求通知后台合并分片。并且webupload对image 类型的文件不分片。最后封装webuploader实现如下:

function upload(file, options) {
    // default options
    options = $.extend({
        folder: '',
        success: $.noop,
        error: $.noop,
        progress: $.noop
    }, options);

    var errorHandler = options.error;
    var successHandler = options.success;
    var progressHanlder = options.progress;
    var fileMd5 = uuidv4();
    var runtimeForRuid = new WebUploader.Runtime.Runtime();
    var wuFile = new WebUploader.File(new WebUploader.Lib.File(WebUploader.guid('rt_'), file));
    var chunkSize = 1 * 1024 * 1024;
    var chunked = file.size > chunkSize;
    // 
    var events = $.extend({
        uploadBeforeSend: function(_, data) {
            if (chunked) {
                data.uuid = fileMd5;
            }
        },
        uploadProgress: progressHanlder
    }, file.type.indexOf('image') >= 0 || !chunked ? {
        uploadSuccess: function(_, data) {
            successHandler(data);
        },
        uploadError: function() {
            errorHandler('上传失败');
        }
    } : {
        uploadFinished: function() {
            var file = uploader.getFiles()[0];
            if (!file || file.type.indexOf('image') >= 0) {
                return;
            }

            $.post('/public/stream-file/', {
                csrf_token: bms.csrf_token,
                chunk: -1,
                uuid: fileMd5,
                upload_folder: options.folder,
                name: file.name
            }, null, 'json').done(successHandler).fail(function() {
                errorHandler('上传失败');
            });
        }
    });
    
    var uploader = WebUploader.create({
        fileNumLimit: 1,
        chunked: chunked,
        chunkSize: chunkSize,
        prepareNextFile: true,
        server: '/public/stream-file/',
        fileVal: 'attachement',
        formData: {
            csrf_token: bms.token,
            upload_folder: options.folder
        }
    });

    $.each(events, function(name, handler) {
        uploader.on(name, handler);
    });

    // 开始上传
    uploader.addFiles(wuFile);
    uploader.upload();
    return uploader;
}
webuploader 实现大文件 分片上传 webuploader 分片上传文件最近研究了下大文件上传的方法,找到了webuploader js 插件进行大文件上传。使用 使用webuploader分成简单直选要引入 <!--引入CSS--> <link rel="stylesheet" type="text/css" href="webuploader文件夹/webuploader.css"><!--引入JS--> <script type 阅读详情

相关推荐

WebUploader+SpringMVC 完成前端文件分片上传与后台分片文件合并

最近看了WebUploader文件上传组件,功能很强大但是官方的文档是给我看吐了。 废了好几头牛的力气终于写了一篇Demo,分享一下也方便以后自己查看 大致上传流程 代码 因为是篇Demo,所以可能有很多不足的地方,代码我都标记了注释 去官网下载WebUploader的包 WebUploader官网 还需要引入jQuery.js 下面是前端代码 <%@ page c...

码 1537

WebUploader大文件分片上传/多线程上传

文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。断点续传是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传或者下载未完成的部分,而没有必要从头开始上传或者下载。

Mr_Zang666的博客 1472

大文件上传----webuploader分片上传

参考:https://www.zhangshengrong.com/p/O3aAyoKa4E/ https://www.jianshu.com/p/1fab52f45fb3 https://blog.youkuaiyun.com/u014150463/article/details/74044467/ https://www.cnblogs.com/hackxiyu/p/8203400.html ht...

jongsuk_sun的博客 1389

webuploader分片上传

按理说,执行 deferred.reject();会跳过分片上传,但是实际操作这个没有卵用,还是会上传。npm install jquery@1.12.4 (使用webuploader需要引入jquery)如果文件上传了一半,可以根据后台的分片数,判断当前哪些分片不需要上传,做到断点续传。这里计算文件 md5 值,也可以监听计算的进度。md5 值可以发给后台,判断当前文件是否已上传。大文件分片上传,此事件会触发多次。chunk 当前第几个分片 1。初始化时设置每个分片 2M。data是上传的分片参数。

weixin_52268321的博客 946

实现WebUploader大文件分片上传的完整指南

WebUploader 是一款纯前端的文件上传组件,由百度前端团队开发,主要用途是为了提供一个基于网页的文件上传解决方案。它将文件上传过程的展示和逻辑分离,既可以在主流浏览器上使用,也能够无缝集成到移动端的Web应用中。Maven的核心是使用一个叫做pom.xml的项目对象模型文件,该文件包含了项目的基本信息、配置信息、构建信息以及项目依赖等。Maven使用一种标准的目录结构,这个结构定义了文件和目录的存放规则,帮助开发者快速熟悉一个项目。

weixin_36122351的博客 1049

噪声整形与过采样实战:从N-bit ADC到DSM的SQNR优化指南

本文深入探讨了噪声整形与过采样技术在DSM(Delta-Sigma调制器)中的应用,重点分析了量化器位数(N)、滤波器阶数(L)和过采样率(OSR)对SQNR优化的影响。通过实战案例和参数协同优化策略,帮助工程师在音频处理和通信系统设计中实现更优的信号质量。

weixin_42561040的博客 339

vue WebUploader 分片上传

大致实现原理:当enctype的值是multipart/form-data时,浏览器会把每个表单项进行分割,分割成不同的部件,以boundary的值为分割标识,这个标识的字符串是随机生成的,最后一个表单项的分割标识字符串末尾会多两个”- -“,代表结束。支持大文件的上传和续传,要求续传支持所有浏览器,包括ie6,ie7,ie8,ie9,Chrome,Firefox,360安全浏览器,并且刷新浏览器后仍然能够续传,重启浏览器(关闭浏览器后再打开)仍然能够继续上传,重启电脑后仍然能够上传。

Mr_Zang666的博客 787

Qt6.5.1+WebRTC学习笔记(十二)环境搭建流媒体服务器(ubuntu22.04+SRS)

若只是实现一对一通信,仅使用webrtc就足够了。但有时间需要进行多个人的直播会议,当人比较多时,建议使用一个流媒体服务器,笔者使用的是SRS。这个开源项目资料比较全,笔者仅在此记录下搭建过程。

aggs1990的专栏 3362

前端上传大型文件或超长数据的解决办法

最近这块好像挻火的,今天早上又有一位网友加我微信,也是想了解这块的技术和方案,实际上我的微信之前就已经在网上公开了,但是论坛里面很多网友还是不知道。昨天晚上论坛里面有一个网友发私信给我,想和我探讨一下这方面的技术问题,他是刚开始接触这块,以前没怎么接触过,都是做的后端,主要是以数据库操作为主,他也是最近接的一个项目,遇到了大文件上传下载的问题,问我有没有好用的组件,其它的要求没有,主要就是好用,方便。

weixin_52041354的博客 1939

差分信号_差分信号的原理及其在PCB的设计

差分线是 PCB 设计中非常重要的一部分信号线,信号处理要求也是相当严谨,今天为大家介绍下差分信号的原理以及其在 PCB 设计中的处理方法。 什么是差分信号 差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相等,相位相差 180 度,极性相反。在这两根线上传输的信号就是差分...

weixin_31849185的博客 1808

从理论到实践:使用Sigrity SystemSI完成DDR4信号完整性仿真全流程解析

本文详细解析了使用Sigrity SystemSI完成DDR4信号完整性仿真的全流程,从核心挑战到实战操作。文章深入探讨了DDR4信号完整性问题,介绍了SystemSI工具链的演进与分工,并提供了从前期准备到高级技巧的详细指南,帮助工程师有效解决DDR4设计中的信号完整性问题。

weixin_30505225的博客 507

大文件分片上传-百度webuploader

大文件分片上传,文件秒传,百度webuploader

qq_20741133的博客 1250

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂GRE、L2TP、IPsec的区别

本文通过Wireshark抓包实战,详细解析GRE、L2TP和IPsec三大隧道协议的核心差异与应用场景。从报文结构到配置示例,帮助网络工程师快速掌握这些协议的本质,提升VPN部署与故障排查能力。特别适合准备HCIP认证的工程师深化理解。

weixin_30352645的博客 438

使用WebUploader实现分片上传文件

WebUploader的官网 http://fex.baidu.com/webuploader/doc/index.html 关于上传文件, 我有写过片关于ant 使用upload上传文件 https://blog.youkuaiyun.com/zm_miner/article/details/95083719 但是现在修改成分片上传, 使用WebUploader实现大文件分片上传,并且有进度显示 html中...

zm_miner的博客 816

Unity 热更 之 【HybirdCLR】+【YooAsset】 [安卓 Android端] [代码 + 资源热更] 功能的 简单实现演示

Unity热更有很多方案,各种lua热更,ILRuntime等,这里介绍的是YooAsset+HybridCLR的热更方案,HybridCLR负责更新c#代码,YooAsset负责更新资源。HybridCLR是一种创新的解决方案,专为 Unity 游戏开发中的热更新需求设计。它通过结合解释执行和 Ahead-of-Time (AOT) 编译技术,为跨平台的游戏开发提供了一种高效的热更新机制。原生C#热更新体验,开发工作流与传统Unity C#开发几乎相同,零学习和使用成本。

仙魁XAN 3866

(5)ModalAI VOXL2

Ardupilot官网关于《Non-GPS navigation》的翻译 —《(5) ModalAI VOXL2》。

无人机开发(开源Ardupilot) 1万+

SpringBoot WebUploader大文件分片上传

后端技术:SpringBoot2.x 页面:freemarker webuploader:http://fex.baidu.com/webuploader/getting-started.html 1.application.properties server.port=9999 spring.freemarker.suffix=.html #上传文件存放目录 xdja.upload...

盲目的拾荒者的博客 5709

【AI智能体】Skills 智能体驱动开发从使用到项目实战详解

Skills 智能体驱动开发从使用到项目实战详解

congge 6599

Springboot+WebUploader优雅实现超大文件的分片上传(二)

在软件工程里,在处理“大”的时候一直是一个痛点和难点,如并发大、数据量大、文件大,对硬件进行升级可以解决一些问题,但这并不最聪明的办法,而对于老板来说,这也不是成本最小的办法。作为开发人员来说,在面对类似极端的问题时,只可智取,不可硬刚,最大化利用好手上现有的资源,以更加优雅的办法来满足用户多样化的需求才是王道。今天的主题也是一个“大”的问题,就是超大文件如何上传和下载?其实在解决这个问题之前,有一个问题是绕不过去的:什么才是大文件?什么是超大文件?几十兆?几百兆?还是几个G?这其实是一个极具争议的问题,在

凡夫编程 3838

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

基于WebUploader实现大文件分片上传

前言 前面叙述了如何利用vue-simple-uploader实现分片上传、断点续传和秒传; 本篇学习基于WebUploader实现这些功能 使用 1.在项目中引入webuploader 注意事项 1、插件基于jquery, 2、不支持npm导入(通过 import './webuploader'; 的方式引入webuploader,会报''caller', 'callee', and 'arguments' properties may not be accessed on strict mode ..

weixin_43909743的博客 1826

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

webuploader分片上传(前后端分离)

项目地址:https://download.youkuaiyun.com/download/zxcnlmx/10389632 功能描述 1、webuploader是百度研发的上传组件,文档不是特别规整,但是也够用了。 2、前端使用官网的上传图片demo,在此基础上代码略微调整做分片。既可以上传图片也可以上传文件。文件超过分片大小才启用分片。 3、分片上传已做md5校验,达到秒传的效果。分片以后需要合并,...

小涴熊的博客 1936

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

百度WebUploader分片上传技术详解

要求:免费,开源,技术支持技术:百度webuploader,分块,切片,断点续传,秒传,MD5验证,纯JS实现,支持第三方软件集成前端:vue2,vue3,vue-cli,html5,webuploader后端:asp.net,.net mvc,.net core,asp,jsp,java,springboot,php,数据库:MySQL,Oracle,SQL Server,达梦,人大金仓,国产数据库。

2501_90699780的博客 1283

webuploader分片上传大文件

html:<style> .wu-example { position: relative; padding: 45px 15px 15px; margin: 15px 0; background-color: #fafafa; box-shadow: inset 0 3px 6px rgba(0, 0, 0,

随记 4000

vue结合WebUploader插件实现大文件分片上传

1.下载webuploader 下载地址:官网http://fex.baidu.com/webuploader/ 2.引入webuploader 使用Web Uploader文件上传需要引入三种资源:JS, CSS, SWF。 方法1.直接引入文件 这里我们使用完全压缩版的webuploader.min.js,同时还要引入Uploader.swf 、 webuploader.css,所以可以删除...

qq_33414883的博客 2497

webuploader文件分片上传与springmvc后台合并

废话不多说,直接给出webuploader的配置。其实配置很简单,在官网上看看文档就行了。     var uploader = WebUploader.create({                         auto: true,                         swf: '${path }/admin/lib/webuploader/0.1.5/Uploader.sw...

eIoBhMojo的博客 1041

C#.NET WEBUPLOADER 分片上传

前端:vue2,vue3,vue-cli,html,jquery后端:asp.net,.net core平台:Windows,macOS,Linux,中标麒麟,银河麒麟,统信UOS,信创国产化CPU:x86,arm,龙芯(mips),龙芯(LoongArch)场景:内网,外网,信创国产化项目数据库:SQL Server,MySQL,Oracle,达梦,人大金仓,国产数据库功能:大文件上传下载,断点续传,文件夹上传下载,加密传输,加密存储,云对象存储。

weixin_52041354的博客 858
上一篇: 二维码生成与解析(使用ThoughtWorks.QRCode)
下一篇: Web Uploader代码分析
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值