node 上传文件 http client to post file

本文详细介绍了使用Node.js进行文件上传的过程,包括如何生成随机边界字符串、设置Content-Type头、构造multipart/form-data格式的请求体以及读取和发送文件流。通过具体代码示例,展示了从创建请求到发送文件的完整流程。

 

node做http client 发送post数据是很容易的事情,但要上传文件就不是太容易了
主要是因为上传文件的报文和普通post是不太一样的

要了解http post可以看下这个 https://imququ.com/post/four-ways-to-post-data-in-http.html

npm上封装好的第三方库很多 比如request,我们来看下自己实现需要怎么做

 

首先要声称个随机串,这个是用来做分段的标记
var boundaryKey = Math.random().toString(16)

上传文件时要设置请求头 Content-Type : 'multipart/form-data; boundary='+boundaryKey+''

报文格式是这样的:

假如 boundaryKey=AaB03x

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

 


from https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

每个字段用 “--”+分割符号 分段

结尾用 “--”+分割符号+“--” 注意用\r\n换行 不可缺少

 

代码实现

 1 var http = require('http')
 2 var fs = require('fs')
 3 var querystring = require('querystring')
 4 var path = require('path')
 5 var util = require('util')
 6 
 7 var boundaryKey = Math.random().toString(16); // random string
 8 var reqdata = {
 9   'abc' : '123'
10 }
11 
12 var request = http.request({
13   host : 'abc.com',
14   port : 80,
15   path : '/abc',
16   method : 'POST'
17 }, function (response) {
18   var data = '';
19   response.on('data', function(chunk) {
20     data += chunk.toString();
21   });
22   response.on('end', function() {
23     console.log(data);
24   });
25 });
26 
27 var enddata = '\r\n--' + boundaryKey + '--';
28 function mkfield (field, value) {
29   return util.format('Content-Disposition: form-data; name="%s"\r\n\r\n%s', field, value);
30 }
31 var payload = '--' + boundaryKey + '\r\n'
32 for (var name in reqdata){
33   payload += mkfield(name ,reqdata[name]) + util.format('\r\n--%s\r\n', boundaryKey)
34 }
35 payload += 'Content-Disposition:form-data; name="img"; filename="image.jpg"\r\n'
36   + 'Content-Type:image/jpeg\r\n'
37   + 'Content-Transfer-Encoding: binary\r\n'
38   + '\r\n';
39 
40 request.setHeader('Content-Type', 'multipart/form-data; boundary='+boundaryKey+'');
41 //request.setHeader('Content-Length', Buffer.byteLength(payload)+Buffer.byteLength(enddata))
42 
43 request.write(payload )
44 
45 fs.createReadStream('文件路径', { bufferSize: 4 * 1024 })
46 .on('end', function() {
47 //报文结束
48   request.end(enddata);
49 }).pipe(request, { end: false })

 

转载于:https://www.cnblogs.com/vaal-water/p/6520370.html

npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @hapi/hoek@8.5.1 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@hapi%2fhoek failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @hapi/joi@15.1.1 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@hapi%2fjoi failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @hapi/topo@3.1.6 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@hapi%2ftopo failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for postcss@7.0.39 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/postcss failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @intlify/core-base@9.14.5 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@intlify%2fcore-base failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for picocolors@0.2.1 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/picocolors failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @intlify/shared@9.14.5 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@intlify%2fshared failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @intlify/message-compiler@9.14.5 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@intlify%2fmessage-compiler failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @isaacs/cliui@8.0.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@isaacs%2fcliui failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for ansi-regex@6.2.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/ansi-regex failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for emoji-regex@9.2.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/emoji-regex failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for ansi-styles@6.2.3 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/ansi-styles failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for string-width@5.1.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/string-width failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for strip-ansi@7.1.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/strip-ansi failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for wrap-ansi@8.1.0 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/wrap-ansi failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @jridgewell/gen-mapping@0.3.13 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@jridgewell%2fgen-mapping failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @jridgewell/sourcemap-codec@1.5.5 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@jridgewell%2fsourcemap-codec failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @jridgewell/resolve-uri@3.1.2 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@jridgewell%2fresolve-uri failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @jridgewell/trace-mapping@0.3.31 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@jridgewell%2ftrace-mapping failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'system' npm warn old lockfile } npm warn old lockfile Could not fetch metadata for @jridgewell/remapping@2.3.5 FetchError: request to https://cmc.centralrepo.rnd.huawei.com/npm/@jridgewell%2fremapping failed, reason: unable to verify the first certificate npm warn old lockfile at ClientRequest.<anonymous> (C:\Users\x60102926\AppData\Local\nvm\v22.19.0\node_modules\npm\node_modules\minipass-fetch\lib\index.js:130:14) npm warn old lockfile at ClientRequest.emit (node:events:519:28) npm warn old lockfile at emitErrorEvent (node:_http_client:105:11) npm warn old lockfile at _destroy (node:_http_client:898:9) npm warn old lockfile at onSocketNT (node:_http_client:918:5) npm warn old lockfile at process.processTicksAndRejections (node:internal/process/task_queues:91:21) { npm warn old lockfile code: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile errno: 'UNABLE_TO_VERIFY_LEAF_SIGNATURE', npm warn old lockfile type: 'syst
最新发布
12-12
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值