如何判断ftp上传文件完毕

FTP文件上传文件实现,定时扫描文件夹上传指定格式文件文件到服务器,C语言实现FTP文件上传详解及代码案例实现_编程题 (c语言实现,能够运行。要求上传源代码及运行结果一个压缩文件里上传,也可 FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。 阅读详情

问题描述:ftp上传文件的时候总是先创建了文件,然后再上传。如果此时程序读取文件可能就读取一部分不完成的数据。那么怎么解决才合理呢


方案1.上传文件的客户端先创建一个临时文件名称,然后上传完毕再重命名。而重命名是修改注册表所以不会产生过程中数据不一致的问题


方案2.在ftp客户端上传文件不由我们控制的时候,不能实施第一方案怎么办呢。打开文件在文件尾追加一个标识内容,关闭打开文件,然后在重新打开文件判断追加写入的内容时候成功,如果不成功,说明文件还在被占用,如果成功了就说明ftp上传结束了。这里感谢公司同事小苏为此方案做出的贡献。

这里解释一下,经过多次实验得知ftp客户端上传文件的时候,使用程序在此文件上追加不上内容,而且java代码不报错,所以才有了方案2.


java代码如下:

package com.ehl.tvc.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;

import org.apache.commons.io.IOUtils;

public class FileUtil {
	private static String endTag = "end";
	/**
	 * 判断文件是否写入内容完毕,如果完毕返回true,反之false
	 * @param f
	 * @return
	 */
	public static boolean checkIniTransfered(File f){
		OutputStream output = null;
		try {
			output = new FileOutputStream(f, true);
			output.write((endTag+"\n").getBytes());
			output.flush();
			output.close();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			IOUtils.closeQuietly(output);
		}
		InputStream input =null;
		try {
			input = new FileInputStream(f);
			List<String> list =  IOUtils.readLines(input);
			if(list.size()>0){
				String endstr =list.get(list.size()-1);
				if(endTag.equals(endstr)){
					return true;
				}
			}
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			IOUtils.closeQuietly(input);
		}
		return false;
	}
}



node实现FTP上传 const fs = require('fs'); const FTPClient = require('ftp'); const dirPath = 'C:\\Users\\Ai_power04\\Desktop\\monit\\dist'; // 本地FTP目录 const remoteFtpPath = 'yc-monit'; // 远程FTP目录 const localFiles = [... 阅读详情

相关推荐

FTP 文件上传下载(Python实现)

FTP 服务器 1.功能 1.分为服务器和客户端两部分,要求启动服务端可以有多个客户端进行连接操作 2.客户端可以选择文件库中的文件进行下载 3.客户端可以上传本地文件到文件库 2.技术分析 1.TCP+多线程 2.判断普通文件:os.path.isfile() 3.查看文件列表:os.listdir() 4.os 模块方法实例: os.path.isfile(’/home/tarena/a.py...

weixin_43514550的博客 1307

使用FileZilla以FTP形式上传网站文件

【转载自维众网络】 对于经常购买虚拟空间的朋友来说,FTP是很常见的术语名词。 它主要负责把文件从本地传到服务器端, 比如订阅了我们的K9通用版邮件,下载代码之后,需要部署到线上的话,首先得把安装包的文件放到服务器,才能进行安装。 这时候就需要FTP工具,对于FTP工具的选用我们依然推荐开源项目产品:FileZilla。 举例从邮件订阅下载代码开始:

Simia_0的博客 4500

关于RT-Thread中PWM无法正常输出的学习

按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。 关于STM32CubeMX配置就不多说了,网上有很多。 首先必定是按照流程来,一定一定按照流程来!!! 需要注意的是加上通道数!!!! 这是流程上没有的,也是RTT的一点小BUG吧 配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO! void HAL_TIM_Base_MspInit(TIM_Han

weixin_42566346的博客 3554

判断FTP文件是否传输完成

当把FTP当作中转站的时候,其他客户端或者设备上传文件到FTP,然后另一个程序去FTP目录下读取文件,这时候有可能读取到正在上传的文件,怎么判断文件上传已经完成呢?采用给文件重名的方式来实现,读取到原来的文件名,不做改变,再直接赋一次值,如果成功说明文件未被占用。下面是java实现过程,其他语言可以使用类似原理。 ``` public static void isOpen(String ft...

tuesdayaa的专栏 6360

Proteus下载安装快速入门:30分钟掌握全过程

手把手教你完成proteus下载安装,从环境配置到首次运行一气呵成,适合电子设计新手快速掌握仿真工具的核心操作步骤。

weixin_31974443的博客 893

WinCC与PLC在西门子逻辑赛项中的通信配置避坑指南

本文针对西门子逻辑赛项中WinCC与PLC通信配置的常见问题,提供了一套实战避坑指南。重点解析了WinCC、PLC与EET仿真平台的三角通信架构,强调了IP地址规划、防火墙设置等关键环节的注意事项,并给出了系统化的故障诊断流程与排查技巧,帮助选手和技术人员快速定位并解决通信故障,确保监控系统稳定运行。

weixin_29165725的博客 107

处理FTP成功上传的判断

#判断ftp上传结果: #判断外部调用函数(如system)执行结果: #日志修改: #上传后紧接着写日志(追加写),另外ftp日志大于100M则清空。

积小成大 1万+

86 arduino 电机yl_(八)arduino入门:直流电机控制

一、本节介绍在本实验中,您将学习如何使用驱动芯片L293D和SunFounder Uno板控制小型直流(DC)电机的方向和速度。为了使初学者更容易,我们将让直流电机左右旋转,自动加速和减速。二、材料准备1 *小型直流电机1 * L293D1 * Arduino Uno板1 *面包板1 * USB数据线杜邦线三、原理讲解L293D这是一个非常实用的芯片,可以独立控制两台直流电机。在这个实验中,只有一...

weixin_29163857的博客 3568

ftpclient查看服务器文件,使用Apache FtpClient在FTP服务器中计算文件校验和

我正在使用Apache Commons Net的FtpClient将视频上传到FTP服务器。 要检查文件是否确实已成功传输,我想计算远程文件的校验和,但是很遗憾,我发现没有可以使用的相关API。我的问题是:是否需要在ftp服务器中计算文件校验和? 如果答案是肯定的,如何在FtpClient中获取校验和?如果答案是否定的,FtpClient如何知道文件是否确实已成功且完全传输?对于FTP,如果可能,...

weixin_30562025的博客 802

嵌入式Linux开发:手把手教你调试OV9281摄像头Sensor(基于全志平台DTS配置)

本文详细解析了嵌入式Linux开发中OV9281摄像头Sensor的调试全流程,重点介绍了基于全志平台的DTS配置指南。从硬件信号检测到软件驱动配置,包括设备树关键参数设置、内核驱动适配实战及图像质量调优技巧,为开发者提供了一套完整的调试方案,助力工业视觉和边缘计算设备的开发。

weixin_28716769的博客 372

5G无人机安全研究综述

国内多所高校提出混合信任模型,南京航空航天大学于2020年提出了起源信息感知的无人机网络信任模型[26],模型基于报文的完整性对报文创建和操作节点的行为评判并生成观测证据,收集证据进行信任评估,识别网络中的恶意节点并进行路由隔离,实现准确的对等信任评估。同时,5G技术的高速率、高可靠性、低时延等特点,能够为无人机提供实时高清图像回传,保证通信网络的稳定,拓展无人机飞控距离限制,丰富了5G无人机的应用场景。5G和无人机技术的融合,丰富了传统无人机的应用服务场景,然而5G无人机仍存在安全隐患。

weixin_70923796的博客 765

判断ftp上传完毕java_那在java的fileupload中如何判断一个文件是否上传完毕?是根据in.next()=="" 来判断的吗?...

那在java的fileupload中如何判断一个文件是否上传完毕?是根据in.next()=="" 来判断的吗?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!那在java的fileupload中如何判断一个文件是否上传完毕?是根据in.next()=="" 来判断的吗?in.next() == nullin.close...

weixin_39718888的博客 888

风控域——决策引擎系统设计

本文详细介绍了风控决策引擎系统的设计与应用。决策引擎系统是一种智能化工具,可自动化、数据驱动地辅助或替代人工决策,广泛应用于金融、医疗、营销、风控等领域。文章阐述了决策引擎的核心功能,包括自动化决策、动态规则管理、实时处理和模型集成,以及系统组成,涵盖数据输入层、规则引擎和模型服务层。此外,还探讨了决策引擎的典型应用场景、技术架构、组件设计,以及风控决策引擎系统的技术方案、设计难点和重点。

庄小焱 3320

判断文件创建成功问题(如ftp上传后或者图片上传后,判断上传成功/写入完毕)

目前我看到的其他人的帖子对上传成功的判断不外乎如下: 1.创建文件时使用临时文件名,以特定后缀结尾,完毕后改回去来判断 2.通过线程隔几秒看文件大小 3.保存到临时目录,完成后移动到正式目录 4.也有在文件内加标记的,但这个不确定对文件会有什么影响 但是最简单有效的方式就是 String fileStr="E:\\我的文档\\OS X 10.11.1(...

a1091662876的博客 1694

手机直连低轨卫星通信:架构、关键技术和未来展望

【摘 要】借助低轨卫星星座全时全域覆盖优势,手机直连卫星通信预期成为6G重要特征之一。首先介绍了手机直连卫星的测试验证、标准化与商业项目发展现状。其次,介绍了基于透明转发、部分可再生处理、完全可再生处理、集成接入和回传的四种手机直连低轨卫星网络架构及组网方式。通过分析手机直连低轨卫星网络场景下高移动性与大传输时延等带来的接入与传输问题,提出对地面移动通信体制进行适应性改进的关键技术方案。最后,探讨了未来手机直连低轨卫星发展发向和潜在思路。通过上述阐述与分析,提供未来发展手机直连低轨卫星通信的可行路径。【关

fzq0625的博客 1707

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java中FTP服务器实现文件的列表展示、文件的上传与下载

③启动从属进程来处理客户进程发来的请求。从属进程对客户进程的请求处理完毕后即 终止,但从属进程在运行期间根据需要还可能创建其他一些子进程。④回到等待状态,继续接受其他客户进程发来的请求。在新建账号中输入自己的用户名以及密码,并选择你所需要的权限。可以看到主机IP有三个,那是因为电脑中含有虚拟机,可以在控制面板中找到网络和 Internet选择网络连接,右键禁用虚拟机。①打开熟知端口(端口号为21),使客户进程能够连接上。②等待客户进程发出连接请求。

m0_73514610的博客 3364

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

FTP上传文件,报“系统错误”

最近通过FTP上传文件遇到了报“系统错误”异常。 一、代码示例 1、FTP上传代码 public Boolean ftpUpload(string filePath, string fileContent, string fileName, Boolean b_isFtpBackup) { b_ftpRet = true; if (s_isFtp.Equals("1")) { FileUtil.getInsta...

学Java,找哪吒 4544

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

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

ftp文件在服务器的什么位置,ftp文件服务器上传后的文件在哪

ftp文件服务器上传后的文件在哪 内容精选换一换从本地上传日志文件,是指从浏览器所在机器选择日志文件并上传。目前只支持选择*.log的日志文件,如果日志文件中包含其他格式文件,则导入时会提示格式错误,如图2所示,单击Upload,则只会上传*.log的日志文件。您若要选择多个文件,直接选择多个文件即可,每次导入最大可选择50个文件,如图3所示。选择多个文件日志文件上传成功后,在File从本地上传日...

weixin_39929153的博客 2039

批处理FTP上传文件到服务器

实例 本机为Windows,服务器为Linux且其用户名为root,密码为1111。创建一个test.bat文件和一个128.txt文件。需要传的文件test(二进制bin文件)放在相同目录下,双击test.bat则可以自动FTP上传文件到服务器。   test.bat内容为: ftp -s:128.txt   128.txt内容为: open 128.0.0.28 root r

Jasmine's Linux World 3836

node ftp上传

const fs = require('fs'); const FTPClient = require('ftp'); const path = require('path') const dirPath = path.join(__dirname, './dist'); // 本地FTP目录 const remoteFtpPath = '/t1/star-pc-upload/test'; // 远程FTP目录 const localFiles = []; // 本地文件 let localFileLen

qq_33332184的博客 717

golang上传文件到ftp服务器

搭建ftp服务器 install centos7 yum -y install vsftpd 查看是否安装成功 service vsftpd status 禁用匿名登录 vim /etc/vsftpd/vsftpd.conf 修改anonymous_enable=YES为 anonymous_enable=NO 重启ftp systemctl restart vsftpd 通过查看ftpusers 和user_list是登录的黑名单和白名单 但是直接使用root竟然无法...

Yu的博客 3276

python上传文件到ftp服务器_FTP 文件上传下载(Python实现)

FTP 服务器1.功能1.分为服务器和客户端两部分,要求启动服务端可以有多个客户端进行连接操作2.客户端可以选择文件库中的文件进行下载3.客户端可以上传本地文件到文件库2.技术分析1.TCP+多线程2.判断普通文件:os.path.isfile()3.查看文件列表:os.listdir()4.os 模块方法实例:os.path.isfile(’/home/tarena/a.py’)#判断是否为普通...

weixin_39574555的博客 1492

FTP文件上传

一、配置FTP文件服务器 以Ubuntu为例 FTP两种模式简介 PORT(主动模式) 第一步FTP客户端首先随机选择一个大于1024的端口p1,并通过此端口发送请求连接到FTP服务器的21号端口建立TCP连接,在FTP中这个连接叫做控制连接,连接成功建立后,FTP客户端会发送port命令,紧接着FTP客户端会监视自己的p1+1端口,FTP服务器接收到port命令会从自己的20号端口向FTP客...

也许是偶然R 422
上一篇: VSFTP 添加用户
下一篇: ambari增加journalnode服务节点
willwill1101
博客等级 码龄11年 5粉丝 29原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值