JS使用技巧-如何解决谷歌浏览器下载图片、PDF文档时只打开不下载的问题?

H5+JS页面直接查看PDF文件 移动端H5+JS页面直接查看PDF文件,纯H5的将pdf通过canvas重新绘制成数据流,展示到页面上。 立即下载

问题描述:

页面下载跨域的图片、pdf文件,浏览器总是自动打开,并且在下载列表里面不显示。

如何解决谷歌浏览器下载图片、PDF文档时只打开不下载的问题?如何变成直接下载?

解决方法:

使用js获取下载流,重新生成本地下载链接,再触发下载事件,代码如下:

function getFile(url,fileName){
	var httpRequest = new XMLHttpRequest();
	//指定响应类型,这决定了浏览器对返回内容的解析方式,设置为空或者text会作为字符解析、json会作为json解析,blob和arraybuffer会作为字节流解析
	httpRequest.responseType ='arraybuffer';
	httpRequest.open('GET', url, true);
	httpRequest.onload  = function () {
		if (httpRequest.readyState == 4 && httpRequest.status == 200) {
			//只有responseType为空或者text,才会使用responseText获取内容,其他情况                        httpRequest.response就是你需要的不含http头的返回内容
			var content = httpRequest.response;
		    var elink = document.createElement('a');
		    elink.download = fileName;
		    elink.style.display = 'none';
		    var blob = new Blob([content]);
			//创建指向内存中字节流的链接
		    elink.href = URL.createObjectURL(blob);
		    document.body.appendChild(elink);
	        elink.click();
		    document.body.removeChild(elink);
		}
	};
	httpRequest.send();
}

亲测可用,在谷歌浏览器点击图片和pdf,就可以显示下载内容,而不是在新tab页打开了

OpenCV透视变换实战:5分钟搞定歪斜证件照矫正(附完整代码) 本文详细介绍了如何使用OpenCV的透视变换技术快速矫正歪斜证件照,包含完整的Python代码实现。通过特征检测、坐标计算和矩阵变换三个核心步骤,5分钟内即可将手机拍摄的歪斜图像自动矫正为专业级证件照,大幅提升图像处理效率。 阅读详情

相关推荐

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

js下载文件,点击的时候变成了打开预览

文件下载, a标签下载, 图片下载跨域, js下载文件

Leon4055的博客 3969

SRAM Bank数量配置:性能、面积与功耗的权衡指南

SRAM(静态随机存取存储器)是芯片设计中的关键存储单元,其Bank数量配置直接影响访问延迟、吞吐率、功耗和面积。Bank切分通过将存储阵列分区,缩短位线和字线延迟,从而提升性能,但会增加外围电路开销。合理配置Bank数量可优化PPA(性能、功耗、面积),在28nm和16nm工艺下,2个Bank通常是性价比最高的选择。本文基于实测数据,探讨不同场景下的Bank配置策略,帮助工程师避免常见误区,提升设计效率。

weixin_27230891的博客 179

JS 解决txt文件直接打开而不是下载

{valueList?.map(url => { let href = url if (getFileName(url)?.endsWith('.txt')) { href = href + '?response-content-type=application/octet-stream' } return <div style={{ width: '2...

雪猫的博客 1459

DolphinScheduler任务状态异常排查:从僵尸任务到数据库修复全流程

本文详细介绍了DolphinScheduler中僵尸任务的识别、诊断与修复全流程,包括数据库层面的SQL操作指南、系统恢复验证方法以及预防措施。针对任务状态异常问题,提供了从基础排查到高级源码分析的完整解决方案,帮助运维人员有效管理系统资源和工作流调度。

weixin_27966471的博客 132

利用按键精灵实现批量截图与智能命名的高效工作流

本文详细介绍了如何利用按键精灵软件构建高效的批量截图与智能命名自动化工作流。通过基础脚本编写、循环逻辑实现及高级命名策略,解决手动操作耗时易错的问题,帮助用户实现一键自动截图、智能保存与文件重命名,大幅提升软件测试、教程制作及数据报告等场景的工作效率。

weixin_29268267的博客 569

vue 移动端和web端实现文件的点击预览 而非下载

kkFileView插件实现预览附件

yyXieDaiMa的博客 2818

HarmonyOS应用开发者基础认证

B. 自定义组件:可复用的 UI 单元,可组合其它组件。D. 内置组件:ArkTS中默认内置的基本组件和布局组件,开发者可以直接调用,如Column、Text、Divider、Button等。E. 属性方法:用于组件属性的配置,统一通过属性方法进行设置,如fontSize()、width()、height()、color() 等。在Column和Row容器组件中,justifyContent用于设置子组件在主轴方向上的对齐格式,alignItems用于设置子组件在交叉轴方向上的对齐格式。

牛肉胡辣汤 3817

取消谷歌点击链接下载文件后但却自动将其打开

有时候在运行完导出表格之后,点击链接会在谷歌浏览器下载表格,但是在下载后选中了总是打开此类文件,然后后面在点击链接的时候直接自动打开了,然后只能转存为下载了,那么怎么来解决这个问题呢。

记录个人成长, 分享好用资源 1万+

10、业务任务(service task)

业务任务通常是用来调用业务系统,camunda中可以调用JAVA代码或者rest api调用。 在camunda中,业务任务实现方式有5种,本节先用一个小例子显示前三种,External 外部任务,Connector连接器后面分别讲解。假设用户预约电器公司上门维修家电,然后师傅上门维修,完成后公司回访客户对师傅服务打分,师傅查询自己的评分。使用java class 模式实现业务任务。 com.forestlake.camunda.servicetask.ReserveRepair 使用Delegate ex

leyoliu的博客 3231

OpenClaw 技术架构解析-网关层(上)

OpenClaw 网关层是架构核心中枢,承接Channel层消息,串联消息路由器、会话状态管理器等五大组件,负责消息分发、会话管理、状态统筹、上下文维护等关键职责,是连接Channel层与AI执行引擎的核心桥梁,保障多渠道交互稳定、有序运行。

wend的博客 712

访问图片服务器中的图片直接显示而不是下载

一句话,换个浏览器直接搞定。 我刚开始用的谷歌,它直接是下载图片的.如图 然后换了个浏览器,我用的QQ浏览器,然后就打开了并且超大

SSLJY_YCFH的博客 2687

鸿蒙开发实战项目(九十二):HUAWEI Health血压测量

是华为开发的用于运动健康领域的一个开放平台, 三方APP可以借助HUAWEI Health开放平台提供的。

斌擎科技 1131

前端文件下载的八种方法(解决pdf、图片在浏览器自动打开问题)

系列文章目录 一、直接使用a标签下载文件(三种方法) 第一种:下载.zip(压缩文件) 第二种:下载.txt(文本文件) 第三种:指定网络地址下载文件 第四种:下载pdf文件(浏览器不自动打开) 二、使用JavaScript(四种方法) 第一种:绑定点击事件 第二种:指定location的href地址 第三种:使用form表单的下载文件 第四种:使用saveAs(url)方法(谷歌、火狐等新浏览器不适用,只支持老的IE6、7、8) 三、使用canvas进行图片下载(防止浏览器自动打开图片) 代码片段如下所示

weixin_46022934的博客 3万+

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...

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

前端下载pdf文档(支持doc/excel/ppt/pdf/jpg、png等)

一、前端有后台返回的各种文档在服务器上的链接地址,实现点击下载文件 1.以a链接点击下载文件列表 <a v-for=“item in tips.filemaintains” :href="${item.filepath}" :download="${item.filename}" @click=“emitEvent(item.event, item)”>{{item.filename}} 使用a标签的download属性来下载文档,其中pdf和图片,谷歌浏览器默认打开,因为有内置pdf浏览器,到

Borage21的博客 2521

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

前端实现PDf文件下载功能

前端实现生成PDF并下载的功能

夏沫之初的博客 2599

深度学习工具包 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")

这将是你看到过最全的pdf预览解决方案

最近做项目遇到在线预览和下载pdf文件,试了多种pdf插件,例如(ie无法直接浏览),最终决定用,这篇文章记录一下我做技术选型的过程。pdf文件理论上可以在浏览器直接打开预览但是需要打开新页面。在仅仅是预览pdf文件且UI要求不高的情况下可以直接通过a标签href属性实现预览 缺点:google的word excel ppt 预览资源,必须是公共可访问的。而且谷歌浏览器上点击就会下载,IE上可以选择是预览还是下载直接通过页面内嵌iframe 此外还可以在iframe标签之间提供一个提示类似这样 ......

qq_42365082的博客 8546

kill-doc 免费文档下载脚本指南:3步把文库页面存成PDF

kill-doc 是一个免费的篡改猴(Tampermonkey)文档下载脚本:打开百度文库、道客巴巴、原创力文档等 33 个以上平台的文档页,按 3 步操作即可把浏览器里已渲染的页面保存为 PDF 或图片压缩包,适合需要留存学习资料、行业标准、办公文档的学生、教师和职场用户。 ## 它是怎么工作的 各文档站的在线预览,本质是把每一页渲染成 canvas 或分页图片展示在浏览器里——你能看到的内

gitblog_00644的博客 214

3个方法突破Google Drive PDF限制:高效下载解决方案

在学术研究和资料整理过程中,用户常遇到Google Drive中"仅查看"权限的PDF文件无法直接下载的问题。本文介绍的Google Drive PDF下载工具通过技术手段实现权限绕过,帮助用户完整保存高质量PDF文档,解决文档保存过程中的权限障碍。 ## 核心优势:重新定义PDF下载体验 本工具与同类解决方案相比,具有三项显著差异: **差异化一:双引擎处理架构** 采用轻量脚本与本地

gitblog_00171的博客 449

html怎么打开本地文件,HTML怎么打开本地文件

2 回答回答:androID 浏览器打开本地HTML文件的方法有些HTML文件放在本地磁盘和sdcard,如何用打开这个网页呢?这种应用在测试时非常有用。有2个方法:1. 使用文件管理器如ES等,需要幸运的是你的文件管理器直接用浏览器打开。2. 在浏览器输入地址访问本地磁盘和SD卡上的HTML,前部分content://com.androID.HTMLfilePRovIDer是ProvIDer的标...

weixin_31423955的博客 1万+

kill-doc文档下载工具终极指南:告别下载限制,一键获取免费文档资源

还在为各种文档网站的下载限制而烦恼吗?kill-doc是一款基于Tampermonkey的用户脚本工具,能够智能绕过百度文库、豆丁网、道客巴巴等主流文档平台的下载限制,实现"所见即所得"的文档下载体验。这款工具通过浏览器渲染技术,将网页中可见的文档内容转换为PDF或图片格式,让你无需注册登录、无需付费订阅,就能轻松下载所需的技术文档、学术资料和电子书籍。 ## 项目价值主张:为什么需要kill-

gitblog_00601的博客 246

如何快速下载Google Drive受保护PDF:终极解决方案指南

你是否曾在Google Drive上发现一份重要的PDF文件,却因为"仅查看"权限而无法下载保存?作为一名学生,小明正在准备毕业论文,他在Google Drive上找到了导师分享的关键参考文献,但每次尝试下载都显示"您没有下载权限"。这种情况不仅影响学习效率,还可能导致重要资料丢失。今天,我将为你介绍一款简单实用的Google Drive PDF下载工具,帮助你轻松突破权限限制,快速获取所需文档。

gitblog_00304的博客 229

三步安装,下载30+平台文档:kill-doc文档下载脚本实战指南

打开百度文库的一份文档,通常要先登录、关广告、连点几个下载按钮,最后只拿到几页。kill-doc 是一款免费的 Tampermonkey 用户脚本,核心能力是:浏览器能渲染出多少文档页,它就按顺序保存多少,输出 PDF、图片压缩包或纯文本三种形态,操作集中在页面右侧的按钮面板上。 ## 📦 安装步骤:三分钟跑起来 这一节解决"脚本怎么进浏览器"的问题,两种方式任选其一。 1. 安装 Tam

gitblog_00789的博客 160

谷歌浏览器插件开发:集成Youtu-Parsing实现网页文档一键解析

本文介绍了如何开发一款集成Youtu-Parsing多模态文档智能解析模型的谷歌浏览器插件,实现网页文档一键解析。借助星图GPU平台,开发者可自动化部署该镜像,快速搭建后端解析服务。该插件能将网页中的PDF或图片文档自动解析为可编辑文本,极大地提升了在线资料查阅和内容提取的效率。

weixin_42577735的博客 95

kill-doc安装与配置教程:5分钟快速上手最强文档下载工具

kill-doc是一款免费的文档下载工具,能够帮助用户轻松下载百度文库、豆丁网、道客巴巴等多个平台的免费文档,自动绕过广告和登录验证,极大提升文档获取效率。 ## 🌟 为什么选择kill-doc? 面对各种文档下载网站的广告弹窗、登录要求和复杂操作,kill-doc提供了一站式解决方案: - **全自动操作**:无需手动点击,脚本自动完成预览和下载 - **多平台支持**:覆盖百度文库、豆丁

gitblog_00470的博客 460

a 标签 、el-link 与 file-saver.js 下载文件

--使用edge浏览器(版本:122): docx,xlsx格式 会新启空白窗口,接着浏览器打开预览-顶部有提示下载按钮,其他可以下载,下载后打开无异常。测试文件:.png,.jpg,.txt,.doc,.docx,.zip,.pdf,.xlsx,.mp4。--使用苹果自带浏览器:xlxs格式 会多空白页-提示不安全文件是否保存下载,其他格式可以正常下载,下载后可打开。测试文件:.png,.jpg,.txt,.doc,.docx,.zip,.pdf,.xlsx,.mp4。

sun_jinlin的博客 1006
上一篇: java日期格式化字符串,大小写区别,YYYY与yyyy,MM与mm,HH与hh
下一篇: tomcat相关技术
snakeflash
博客等级 码龄9年 25粉丝 39原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值