c# 文件上传下载

C#实现文件上传下载工具类 本篇文章在VS2013环境下采用C#语言实现将文件上传和下载功能。上传时,为避免文件名在服务器中重复,采用“服务器时间+8位随机码+文件名+文件后缀“的方式作为服务器上的文件名;下载采用的是WebAPI的方式进行的,下载成功后可自定义文件的保存路径。具体源码如下所示:using System; using System.IO; using System.Net; using System.Net.H 阅读详情

1. 介绍 

C#文件上传下载用WebClient类实现

微软官方使用Demo

https://docs.microsoft.com/en-us/dotnet/api/system.net.webclient.downloadfile?view=netframework-4.7.2

架构为B/S

 

模板

服务器: WebForm

客户端:ConsoleApplication

 

2. 代码

2.1  客户端

解决方案:

WebClientOper.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;

namespace WebClientOperation
{
    class WebClientOper
    {
        public bool UploadFile(string address, string fileName)
        {
            if (!File.Exists(fileName))
                return false;

            using (WebClient client = new WebClient())
            {
                client.UploadProgressChanged += Client_UploadProgressChanged; ;
                client.UploadFileCompleted += Client_UploadFileCompleted; ;
                client.UploadFileAsync(new Uri(address), fileName);

                Console.ReadKey();
            }

            return true;
        }

        private void Client_UploadFileCompleted(object sender, UploadFileCompletedEventArgs e)
        {
            Console.WriteLine("Upload Completed...");
        }

        private void Client_UploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
        {
            Console.WriteLine($"{e.ProgressPercentage}:{e.BytesReceived}/{e.TotalBytesToReceive}");
        }

        public bool DownloadFile(string address, string fileName)
        {
            using (WebClient client = new WebClient())
            {
                client.DownloadProgressChanged += Client_DownloadProgressChanged; ;
                client.DownloadFileCompleted += Client_DownloadFileCompleted;
                client.DownloadFileAsync(new Uri(address), fileName);

                Console.ReadKey();
            }

            return true;
        }

        private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            Console.WriteLine("Download Completed...");
        }

        private void Client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine($"{e.ProgressPercentage}:{e.BytesReceived}/{e.TotalBytesToReceive}");
        }

        public void DisplayImage()
        {

        }
    }
}

Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace WebClientOperation
{
    class Program
    {
        static void Main(string[] args)
        {
            Test();
        }

        static void Test()
        {
            string filePath = @"E:\sky.jpg";


            // IIS Upload
            // string address = @"http://localhost:22903/WebServer.aspx";
            // IIS Download 
            // pic path = "C:\Users\Irvin\source\repos\WebServer\WebServer\sky.jpg"
            string address = @"http://localhost:22903/WebServer.aspx/sky.jpg";

            WebClientOper webClientOper = new WebClientOper();
            // webClientOper.UploadFile(address, filePath);
            webClientOper.DownloadFile(address, filePath);
        }
    }
}

2.2 服务器:

创建空web项目

添加网站WebServer

解决方案

 

WebServer.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WebServer.aspx.cs" Inherits="WebServer" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
        <div>
        </div>
    </form>
</body>
</html>

WebServer.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class WebServer : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        foreach (string f in Request.Files.AllKeys)
        {
            HttpPostedFile file = Request.Files[f];
            file.SaveAs("E:\\UploadedFiles\\" + file.FileName);
        }
    }
}

 

3. 测试

3.1 上传测试

修改上传URL为服务器主页URL, 启动服务器,拷贝并修改address

客户端修改

string address = @"http://localhost:22903/WebServer.aspx";

然后修改上传文件路径

string filePath = @"E:\sky.jpg";

服务器修改

file.SaveAs("E:\\UploadedFiles\\" + file.FileName); }

此处上传文件保存到E:\\UploadedFiles\\

 

先启动服务器, 然后执行客户端程序

执行成功

上传成功

 

3.2 下载测试

这里用sky.jpg图片测试, 将文件放到WebServer项目文件WebServer中,作为下载资源

启动服务器, 拷贝网页URL, 这里是http://localhost:22903/WebServer.aspx

客户端控制台程序, 修改address为刚才拷贝URL+sky.jpg

string address = @"http://localhost:22903/WebServer.aspx/sky.jpg";

然后修改保存地址,这里是

string filePath = @"E:\sky.jpg";

 执行

下载成功

 

自己用了四天时间, 终于搞清楚c# B/S上传下载
希望对大家有帮助

代码并不难, 环境配置和架构才是关键

C#实现文件上传下载教程 C#(读作“看”)是微软公司开发的一种面向对象的编程语言,它是.NET框架的主要语言之一。C#语言简洁明了,语法与C++和Java相似,但引入了许多新的特性,如委托、匿名方法、迭代器、泛型等。这些特性使得C#成为编写Windows应用程序的首选语言之一。网络编程是指通过网络发送和接收数据,实现不同计算机之间通信的应用程序开发。在C#中,常用的网络编程模型有同步模式和异步模式。同步模式程序会阻塞当前线程,直到操作完成;而异步模式允许程序在等待网络操作完成时继续执行其他任务。 阅读详情

相关推荐

C#中实现FTP文件上传和下载的全面指南

文件传输协议(FTP)是互联网上用于文件传输的协议,它允许用户或应用程序连接到远程服务器,浏览目录,并上传或下载文件。在C#中,开发者可以使用标准的.NET类库中的和类来实现FTP功能。本章首先介绍FTP的基础知识,并展示如何在C#环境下实现基本的FTP操作。FTP使用标准的网络协议在客户端和服务器之间传输文件。它使用两个TCP端口:20用于数据传输,21用于命令和控制信息。FTP是基于客户端-服务器模型的应用程序,用户通过身份验证登录到FTP服务器。

weixin_36064575的博客 1915

C# 调用IDM实现文件下载

最后,请注意,DownloadFile 方法返回一个 DownloadFileResponse 对象,其中包含有关下载的详细信息,例如下载进度、下载文件大小等。您可以使用 DownloadFileResponse 对象的 FilePath 属性获取下载文件的路径。您可以从 IDM 的官方网站 https://www.idm.link/下载最新版本的 IDM。一旦我们创建了 Idm 实例和下载选项,我们就可以调用 DownloadFile 方法来启动下载。AutomaticDownload:自动下载。

大佬的博客 810

ASP.NET(C#) Web Api通过文件流下载文件的实例

主要介绍了ASP.NET(C#) Web Api通过文件流下载文件的方法,提供源码下载,需要的朋友可以参考下。

转 C# 文件下载四方法

using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts;

u010855333的博客 329

深入探究贝叶斯网络(Bayesian Network):从基础原理到实际应用

贝叶斯网络,也称为信念网络或有向无环图模型,是一种概率图模型。它使用有向无环图(DAG)来表示随机变量之间的条件依赖关系。每个节点代表一个随机变量,边表示变量之间的条件依赖关系。贝叶斯网络作为一种强大的工具,通过结合概率论和图论,为复杂系统建模和推理提供了有效手段。无论是在医学诊断、故障检测还是自然语言处理等领域,它都展示了巨大的潜力。然而,其计算复杂度高、结构学习困难等挑战也需要我们在实际应用中不断优化算法和技术。希望通过本文,你能对贝叶斯网络有更深入的理解,并能够在实际项目中灵活应用这一强大工具。

qq_28791753的博客 5968

MLX90640 热成像 STM32

MLX90640 热成像

zhaocundang's blog 5005

C#WebClient上传文件

//上传文件             System.Net.WebClient client = new System.Net.WebClient();             client.UploadFile("http://www.ourwebsite.com/newfile.htm","c:\\file\\demo.htm");             //上传图片        

菜刀居士的专栏 1074

Unity详细介绍说明限制Unity帧率的方式

在Unity开发中,帧率(FPS,Frames per Second)是一个非常重要的表现标准,它直接影响了游戏运行的流畅度。在某些应用场景里,我们可能需要手动限制帧率。限制帧率可以减少电脑的CPU和GPU负载,使运行更加稳定,同时对于移动设备来说还能有效降低电量消耗。下面就详细介绍几种限制Unity中帧率的方式。

zjw1349547081的专栏 5434

c#.net中实现文件上传下载的三种解决方案(推荐)

" size="small" type="success" @click="submitUpload">上传到服务器选取文件responseType: "blob" // 表明返回服务器返回的数据类型。

Mr_Zang666的博客 2483

奔图M6700-M6800-M7100-M7200 系列打印机拆解教程?

奔图M6700-M6800-M7100-M7200 系列打印机拆解教程?

m0_58098052的博客 1591

SPSS(二)SPSS实现多因素方差分析模型(图文教程+数据集)

SPSS(二)SPSS实现多因素方差分析模型 单因素方差分析上一篇博客https://blog.youkuaiyun.com/LuYi_WeiLin/article/details/89917656已经介绍完毕 这篇博客我们主要来学习多因素方差分析 多因素方差分析,就是同时考虑若干个控制因素的情况下,分别分析它们的改变是否造成观察变量的显著变动 (多个自变量,一个因变量)自变量类型以分类变量为主也可以...

可乐联盟 6万+

C#读写app.config中的数据

<br />读语句:<br />          String str = ConfigurationManager.AppSettings["DemoKey"];<br />写语句:<br />           Configuration cfa = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);<br />           cfa.AppSettings.Settings["DemoKey"].Va

爱拼才会赢 1503

静态编译Qt5源码(Kylin-Desktop-V10-SP1-2203-LoongArch64+qt5.15.16)

之前的文档,记录的是通用情况,本次笔者记录下Qt5的静态编译过程,供有需要的小伙伴参考使用的操作系统是Kylin-Desktop-V10-SP1-General-Release-2203-LoongArch64,处理器是龙芯3A5000,架构是loongarch。

aggs1990的专栏 1401

C#实现文件上传下载

使用C#编写一个简单的文件上传和下载功能很简单,只要掌握了一些关键点和易错点就足够在很短的时间内设计一个实用的文档管理页面。

好大一只麻吉 1万+

第二节:Vben Admin 登录逻辑梳理和对接后端准备

第一节,我们已经配置了前端环境,运行起来了我们的Vben Admin的项目。本节内容,我们先熟悉下项目的目录和文件,然后开始准备对接后端程序路由在 src/router页面在 sr/views本节前端登录逻辑梳理完成了,后端只要在/api/login 接口编写返回逻辑,前后段就可以打通了,具体详情我们下一节介绍。

cuiwin的专栏 5084

激光雷达点云可视化:Open3D与PCL实战

激光雷达点云可视化:Open3D与PCL实战 ,人工智能,计算机视觉,大模型,AI,该文围绕激光雷达点云可视化,介绍了Open3D与PCL的实战应用。先阐述点云基础概念、特点及可视化意义,接着讲解Open3D的简介、环境配置,以及其在点云读取、显示、颜色设置、下采样和滤波等方面的实战操作,还介绍了PCL的基础、环境配置及相关实战,包括点云读取、显示、颜色设置、下采样和滤波,同时对比了两者的易用性、功能覆盖、性能和适用场景,给出综合实战案例与常见问题解决方法,为点云可视化处理提供了全面指导。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 12万+

C#文件上传与下载

C#文件上传与下载 开发工具与关键技术:VS MVC、SQL 撰写时间:2019/5/14 在一个系统中,用户需要上传一份文件到服务器中,但是编程的程序代码中不允许提交特殊字符,程序默认为危险字符,故需要提交这种字符的话,需要取消程序验证。[ValidateInput(false)]取消危险字符的验证 如 “<> %KaTeX parse error: Expected 'E...

weixin_44519188的博客 3251

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

C# Http文件上传下载

C# Http文件下载公共类(支持断点续传) http://www.cnblogs.com/hayden/archive/2012/04/26/2472815.html C# Http方式下载文件到本地类改进版 https://www.cnblogs.com/xiandedanteng/p/7079322.html C#实现文件上传下载工具类 https://blo...

weixin_30502965的博客 553

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

教你如何实现c#文件上传下载功能

简单介绍一下c#文件上传下载功能实现。 NuGet 安装SqlSugar Model文件下新建 DbContext 类 public class DbContext { public DbContext() { Db = new SqlSugarClient(new ConnectionConfig() { ConnectionString = "server=localhost;uid=root;pwd=woshishui;database=test",

Free雅轩的博客 1012

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

C#如何实现文件上传与下载

该说不说,最近这块挻火的,今天早上又有网友加我微信,实际上我的微信号之前就已经在网上公开了,但是很多网友还是说找不到,这个就真没办法了。

alisky119的博客 1596

C# WebClient实现文件上传 文件下载

C# WebClient实现文件上传一、同步上传二、异步上传三、大文件上传1.服务端web.config需要配置最大的请求:2.WebApi代码备注: 一、同步上传 文章 https://www.cnblogs.com/duanjt/p/6420172.html 里面有提到服务端通过WebApi如何实现文件上传,这里就只说客户端使用WebClient上传,直接上代码: private void button2_Click(object sender, EventArgs e) { try

秋̶᭄ꦿ攻城狮࿆ྂ 2790

如何在C#中实现文件上传下载功能?

要求:免费,开源,技术支持功能:大文件上传下载,断点续传,文件夹上传下载,加密传输,加密存储,云对象存储前端:vue2,vue3,vue.js,vue-cli,react,html,jquery后端:asp.net,vb.net,.net core,.net mvc,.net webform平台:Windows,macOS,Linux,Ubuntu,RedHat,CentOS,中标麒麟,银河麒麟,统信UOS,信创国产化。

weixin_52050572的博客 772
上一篇: 软链接 mklink
下一篇: Apache FTP Server 上传和文件拷贝速度比较
Empty_Android
博客等级 码龄10年 98粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值