 ><center>[source](https://ipfs.io/ipfs/QmTgtbb4LckHaXh1YhpNcBu48cFY8zgT1Lh49q7q7ksf3M)</center> #### What Will I Learn? - Build and deploy a NodeJS app for IPFS file uploads. - Allow videos, gifs or custom file types. - Prevent not allowed files from being uploaded. - Set max file size for uploads. #### Requirements - Laptop or Desktop Computer (Windows, Linux or Mac) - NodeJS and NPM - Several different files to upload (gif, mp4, .png etc.) #### Difficulty - Advanced #### Tutorial Contents <center>Project Structure</center>  ><center>Find repository on [GitHub](https://github.com/hsynterkr/steemia-ipfs)</center> - Build a Node App and Download IPFS NPM Package Let's start by creating an application with NodeJS starter pack. Once you have created a NodeJS application, create index.js for the homepage and upload.js for the file uploads in the routes folder. Meanwhile, create a folder named uploads under the routes folder to keep files. Create a function in index.js for incoming GET requests to homepage. ```` var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router; ```` - Start writing upload.js by installing the IPFS NPM library. ```` npm install ipfs-api --save ```` Once you have installed the IPFS library, start writing upload.js. Import **ipfs-api** to connect IPFS node and import **fs**, **multer** and **path** libraries to upload files to IPFS node. ```` const ipfsAPI = require('ipfs-api'); const multer = require('multer'); const path = require('path'); const fs = require('fs'); var express = require('express'); var router = express.Router(); ```` * You can set max file size for IPFS uploads. You must write max size in byte type. I set it to 52428800. 52428800 byte is 50MB ```` const MAX_SIZE = 52428800; ```` * Set the multer library to keep the files in the folder named uploads. ```` const storage = multer.diskStorage({ destination(req, file, cb) { cb(null, path.join(__dirname, 'uploads')); }, filename(req, file, cb) { cb(null, `${Date.now()}.${file.mimetype.split('/')[1]}`); }, }); const upload = multer({ storage }); ```` * Define the IPFS server address to which you want to upload files. I will run it on localhost. You can also start an IPFS node on localhost or create a node on the cloud. ```` const ipfsAPI = require('ipfs-api'); const ipfs = ipfsAPI({ host: '127.0.0.1', port: 5001, protocol: 'http' }); ```` * Create a function in upload.js for incoming GET requests to upload page. ```` /* upload GET endpoint. */ router.get('/', function(req, res, next) { res.send('Upload endpoint!'); }); ```` * Create another function in upload.js for incoming POST requests to upload page. This function allows the user to upload a file to IPFS node and it's prevent uploading if the max file size is exceeded. Also this function checks the file type and ensures that the uploaded file is successfully uploaded to the IPFS node. ```` /* upload POST endpoint */ router.post('/', upload.single('file'), (req, res) => { if (!req.file) { return res.status(422).json({ error: 'File needs to be provided.', }); } const mime = req.file.mimetype; if (mime.split('/')[0] !== 'image') { fs.unlink(req.file.path); return res.status(422).json({ error: 'File needs to be an image.', }); } const fileSize = req.file.size; if (fileSize > MAX_SIZE) { fs.unlink(req.file.path); return res.status(422).json({ error: `Image needs to be smaller than ${MAX_SIZE} bytes.`, }); } const data = fs.readFileSync(req.file.path); return ipfs.add(data, (err, files) => { fs.unlink(req.file.path); if (files) { return res.json({ hash: files[0].hash, }); } return res.status(500).json({ error: err, }); }); }); ```` * Statement to warn the user if the file does not exist in POST request. ```` if (!req.file) { return res.status(422).json({ error: 'File needs to be provided.', }); } ```` * Statement to check filetype in POST request. I only allowed image files. You can also allow video files. ```` const mime = req.file.mimetype; if (mime.split('/')[0] !== 'image') { fs.unlink(req.file.path); return res.status(422).json({ error: 'File needs to be an image.', }); } ```` * Statement to allow images and videos ```` const mime = req.file.mimetype; if (mime.split('/')[0] !== 'image' || mime.split('/')[0] !== 'video') { fs.unlink(req.file.path); return res.status(422).json({ error: 'File needs to be an image or video.', }); } ```` * Statement to check size of file. If the file size exceeds the max size you specify, upload will be prevented. ```` const fileSize = req.file.size; if (fileSize > MAX_SIZE) { fs.unlink(req.file.path); return res.status(422).json({ error: `Image needs to be smaller than ${MAX_SIZE} bytes.`, }); } ```` * This function allows the uploaded file to be sent to the IPFS node. The function will return the HASH code after the file has been successfully uploaded. ```` const data = fs.readFileSync(req.file.path); return ipfs.add(data, (err, files) => { fs.unlink(req.file.path); if (files) { return res.json({ hash: files[0].hash, }); } return res.status(500).json({ error: err, }); }); ```` With the HASH returned from the function, you can access your file via the IPFS gateway. ```` https://gateway.ipfs.io/ipfs/ {HASH} https://gateway.ipfs.io/ipfs/QmaJVawuxkDnKxE6tFDT1V6xVjag3wDCG2BVBDjfwEwkLJ ```` #### Curriculum - [[IPFS Tutorial #1] - Build a NodeJS app for IPFS](https://utopian.io/utopian-io/@hsynterkr/host-your-images-online-forever-with-ipfs) <br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@hsynterkr/ipfs-tutorial-2-build-a-nodejs-app-for-ipfs">Utopian.io - Rewarding Open Source Contributors</a></em><hr/>
author | hsynterkr | ||||||
---|---|---|---|---|---|---|---|
permlink | ipfs-tutorial-2-build-a-nodejs-app-for-ipfs | ||||||
category | utopian-io | ||||||
json_metadata | "{"community":"utopian","app":"utopian/1.0.0","format":"markdown","repository":{"id":20312497,"name":"js-ipfs","full_name":"ipfs/js-ipfs","html_url":"https://github.com/ipfs/js-ipfs","fork":false,"owner":{"login":"ipfs"}},"pullRequests":[],"platform":"github","type":"tutorials","tags":["utopian-io","ipfs","blockchain","steemdev"],"users":["hsynterkr"],"links":["https://ipfs.io/ipfs/QmTgtbb4LckHaXh1YhpNcBu48cFY8zgT1Lh49q7q7ksf3M/raster-generated/ipfs-logo-text-512-ice.png","https://ipfs.io/ipfs/QmTgtbb4LckHaXh1YhpNcBu48cFY8zgT1Lh49q7q7ksf3M","https://cdn.utopian.io/posts/bc97f143949a86c74d8d25ed34d5f13f801eimage.png","https://github.com/hsynterkr/steemia-ipfs","https://utopian.io/utopian-io/@hsynterkr/host-your-images-online-forever-with-ipfs"],"image":["https://ipfs.io/ipfs/QmTgtbb4LckHaXh1YhpNcBu48cFY8zgT1Lh49q7q7ksf3M/raster-generated/ipfs-logo-text-512-ice.png","https://cdn.utopian.io/posts/bc97f143949a86c74d8d25ed34d5f13f801eimage.png"],"moderator":{"account":"mcfarhat","time":"2018-04-30T15:11:45.826Z","pending":false,"reviewed":true,"flagged":false},"questions":{"voters":["jakipatryk","portugalcoin"],"answers":[{"question_id":"tuts-1","answer_id":"tuts-1-a-1","user":"jakipatryk","influence":5},{"question_id":"tuts-2","answer_id":"tuts-2-a-1","user":"jakipatryk","influence":5},{"question_id":"tuts-3","answer_id":"tuts-3-a-1","user":"jakipatryk","influence":5},{"question_id":"tuts-4","answer_id":"tuts-4-a-1","user":"jakipatryk","influence":5},{"question_id":"tuts-5","answer_id":"tuts-5-a-4","user":"jakipatryk","influence":5},{"question_id":"tuts-6","answer_id":"tuts-6-a-1","user":"jakipatryk","influence":5},{"question_id":"c-1","answer_id":"c-1-a-2","user":"jakipatryk","influence":5},{"question_id":"c-2","answer_id":"c-2-a-1","user":"jakipatryk","influence":5},{"question_id":"tuts-1","answer_id":"tuts-1-a-2","user":"portugalcoin","influence":60},{"question_id":"tuts-2","answer_id":"tuts-2-a-1","user":"portugalcoin","influence":60},{"question_id":"tuts-3","answer_id":"tuts-3-a-2","user":"portugalcoin","influence":60},{"question_id":"tuts-4","answer_id":"tuts-4-a-1","user":"portugalcoin","influence":60},{"question_id":"tuts-5","answer_id":"tuts-5-a-1","user":"portugalcoin","influence":60},{"question_id":"tuts-6","answer_id":"tuts-6-a-1","user":"portugalcoin","influence":60},{"question_id":"c-1","answer_id":"c-1-a-2","user":"portugalcoin","influence":60},{"question_id":"c-2","answer_id":"c-2-a-3","user":"portugalcoin","influence":60}],"total_influence":0,"most_rated":[{"question_id":"tuts-1","answer_id":"tuts-1-a-2","influence":60,"voters":["portugalcoin"]},{"question_id":"tuts-2","answer_id":"tuts-2-a-1","influence":65,"voters":["jakipatryk","portugalcoin"]},{"question_id":"tuts-3","answer_id":"tuts-3-a-2","influence":60,"voters":["portugalcoin"]},{"question_id":"tuts-4","answer_id":"tuts-4-a-1","influence":65,"voters":["jakipatryk","portugalcoin"]},{"question_id":"tuts-5","answer_id":"tuts-5-a-1","influence":60,"voters":["portugalcoin"]},{"question_id":"tuts-6","answer_id":"tuts-6-a-1","influence":65,"voters":["jakipatryk","portugalcoin"]},{"question_id":"c-1","answer_id":"c-1-a-2","influence":65,"voters":["jakipatryk","portugalcoin"]},{"question_id":"c-2","answer_id":"c-2-a-3","influence":60,"voters":["portugalcoin"]}]},"score":79,"total_influence":65,"staff_pick":null,"staff_pick_by":null,"config":{"questions":[{"question":"How many substantial concepts does this tutorial address?","question_id":"tuts-1","answers":[{"answer":"4-5 substantial concepts covered in the tutorial.","answer_id":"tuts-1-a-1","value":10},{"answer":"2-3 substantial concepts covered in the tutorial.","answer_id":"tuts-1-a-2","value":7},{"answer":"1 substantial concept covered in the tutorial.","answer_id":"tuts-1-a-3","value":3},{"answer":"More than 5 substantial concepts covered in the tutorial.","answer_id":"tuts-1-a-4","value":0}]},{"question":"Does the title and the outline of the tutorial properly reflect the content?","question_id":"tuts-2","answers":[{"answer":"Yes, it is very clear.","answer_id":"tuts-2-a-1","value":15},{"answer":"To some extent.","answer_id":"tuts-2-a-2","value":11.5},{"answer":"The title is somewhat misleading and/or the outline is not detailed or informative enough.","answer_id":"tuts-2-a-3","value":4.5},{"answer":"Title and outline are of little or no relevance to the content of the tutorial.","answer_id":"tuts-2-a-4","value":0}]},{"question":"Did the contributor provide supplementary resources, such as code and sample files in the contribution post or a linked GitHub repository?","question_id":"tuts-3","answers":[{"answer":"Yes, exceptional supplementary resources are provided including a relevant github repo/gist.","answer_id":"tuts-3-a-1","value":15},{"answer":"Supplementary resources provided are of high relevance.","answer_id":"tuts-3-a-2","value":12},{"answer":"Contributor provides minimal supplementary resources.","answer_id":"tuts-3-a-3","value":6},{"answer":"No supplementary resources were provided.","answer_id":"tuts-3-a-4","value":0}]},{"question":"Is the tutorial part of a series?","question_id":"tuts-4","answers":[{"answer":"Yes.","answer_id":"tuts-4-a-1","value":10},{"answer":"Yes, but it is the first entry in the series.","answer_id":"tuts-4-a-2","value":7},{"answer":"No, but it works just fine as a stand-alone tutorial.","answer_id":"tuts-4-a-3","value":5},{"answer":"No.","answer_id":"tuts-4-a-4","value":0}]},{"question":"Does the tutorial contain sufficient explanatory visuals?","question_id":"tuts-5","answers":[{"answer":"Yes, the visual components of the post were adequate in quality and quantity.","answer_id":"tuts-5-a-1","value":10},{"answer":"The volume of visual components included was unnecessarily large.","answer_id":"tuts-5-a-2","value":7},{"answer":"The post lacked sufficient visualization to easily learn from the content.","answer_id":"tuts-5-a-3","value":3},{"answer":"No visualization was presented in this contribution.","answer_id":"tuts-5-a-4","value":0}]},{"question":"How unique and/or innovative are the concepts covered in the tutorial?","question_id":"tuts-6","answers":[{"answer":"This was the first time I read about the concepts covered.","answer_id":"tuts-6-a-1","value":10},{"answer":"The concepts covered were innovative and offer some usefulness.","answer_id":"tuts-6-a-2","value":7},{"answer":"I have read several similar ideas and thoughts elsewhere, but this one was of higher quality.","answer_id":"tuts-6-a-3","value":5},{"answer":"Such tutorials can be found online with great ease and the contribution add no value to the open source community.","answer_id":"tuts-6-a-4","value":0}]},{"question":"How would you describe the formatting, language and overall presentation of the post?","question_id":"c-1","answers":[{"answer":"The post is of very high quality.","answer_id":"c-1-a-1","value":10},{"answer":"The post is of decent quality, but not spectacular in any way.","answer_id":"c-1-a-2","value":7},{"answer":"The post is poorly written and/or formatted, but readable.","answer_id":"c-1-a-3","value":3},{"answer":"The post is really hard to read and the content is barely understandable.","answer_id":"c-1-a-4","value":0}]},{"question":"How would you rate the overall value of this contribution on the open source community and ecosystem?","question_id":"c-2","answers":[{"answer":"This contribution brings great and impactful value, and can be used for applications outside the specific project.","answer_id":"c-2-a-1","value":20},{"answer":"This contribution adds significant value to the open source community and ecosystem, or is of critical importance to the specific project.","answer_id":"c-2-a-2","value":16},{"answer":"This contribution adds some value to the open source community and ecosystem or is only valuable to the specific project.","answer_id":"c-2-a-3","value":8},{"answer":"This contribution adds no value to the open source community and ecosystem or the specific project.","answer_id":"c-2-a-4","value":0}]}]}}" | ||||||
created | 2018-04-30 01:02:33 | ||||||
last_update | 2018-04-30 15:11:48 | ||||||
depth | 0 | ||||||
children | 3 | ||||||
last_payout | 2018-05-07 01:02:33 | ||||||
cashout_time | 1969-12-31 23:59:59 | ||||||
total_payout_value | 71.364 HBD | ||||||
curator_payout_value | 27.348 HBD | ||||||
pending_payout_value | 0.000 HBD | ||||||
promoted | 0.000 HBD | ||||||
body_length | 6,289 | ||||||
author_reputation | 12,645,130,948,582 | ||||||
root_title | "[IPFS Tutorial #2] - Build a NodeJS app for IPFS" | ||||||
beneficiaries |
| ||||||
max_accepted_payout | 1,000,000.000 HBD | ||||||
percent_hbd | 10,000 | ||||||
post_id | 52,929,521 | ||||||
net_rshares | 17,819,884,886,897 | ||||||
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
minersean | 0 | 330,954,097 | 50% | ||
dyancuex | 0 | 1,048,091,161 | 50% | ||
toninux | 0 | 553,082,641 | 50% | ||
jdc | 0 | 801,662,864 | 20% | ||
bargolis | 0 | 716,893,851 | 5% | ||
jakipatryk | 0 | 52,537,383,464 | 100% | ||
helo | 0 | 28,406,287,403 | 100% | ||
ilyastarar | 0 | 24,410,076,052 | 50% | ||
flauwy | 0 | 1,502,711,396 | 10% | ||
mahdiyari | 0 | 9,507,016,031 | 10% | ||
ronimm | 0 | 10,873,142,897 | 100% | ||
saksham | 0 | 475,259,452 | 37% | ||
makrotheblack | 0 | 2,790,871,997 | 50% | ||
simonluisi | 0 | 2,726,920,947 | 100% | ||
thinkkniht | 0 | 99,841,501 | 75% | ||
inquiringtimes | 0 | 73,889,141,703 | 50% | ||
elbleess | 0 | 318,193,299 | 50% | ||
jfuenmayor96 | 0 | 2,445,061,064 | 50% | ||
onos | 0 | 7,888,256,695 | 100% | ||
instantania.cat | 0 | 1,467,520,131 | 50% | ||
harshallele | 0 | 5,042,354,446 | 50% | ||
cifer | 0 | 4,157,971,005 | 80% | ||
jesdn16 | 0 | 2,543,976,500 | 100% | ||
xtramedium | 0 | 379,045,035 | 50% | ||
odibezeking | 0 | 244,910,785 | 100% | ||
bhim | 0 | 67,243,640 | 50% | ||
stoodkev | 0 | 20,137,374,990 | 10% | ||
luisrod | 0 | 116,014,491 | 15% | ||
ansonoxy | 0 | 1,750,813,906 | 100% | ||
eastmael | 0 | 32,201,366,295 | 100% | ||
jamesbarraclough | 0 | 501,769,197 | 100% | ||
hillaryaa | 0 | 1,163,746,387 | 100% | ||
espoem | 0 | 29,106,838,393 | 40% | ||
maneki-neko | 0 | 842,200,681 | 1% | ||
techmojo | 0 | 2,088,075,054 | 50% | ||
ankapolo | 0 | 1,455,401,689 | 10% | ||
idlebright | 0 | 3,155,989,615 | 50% | ||
utopian-io | 0 | 17,066,676,856,121 | 11.4% | ||
steaknsteem | 0 | 2,359,142,975 | 50% | ||
masud222 | 0 | 234,312,356 | 50% | ||
furkanaydemir | 0 | 613,467,555 | 100% | ||
moorkedi | 0 | 1,639,256,615 | 100% | ||
parag | 0 | 217,019,481 | 50% | ||
kimaben | 0 | 522,133,843 | 25% | ||
kslo | 0 | 2,487,215,977 | 50% | ||
nathalie13 | 0 | 1,034,490,180 | 100% | ||
not-a-bird | 0 | 5,148,874,600 | 50% | ||
cheneats | 0 | 787,617,183 | 30.74% | ||
adhew | 0 | 61,124,335 | 10% | ||
bitopia | 0 | 1,457,595,498 | 100% | ||
berkaytekinsen | 0 | 1,747,081,425 | 100% | ||
trbooster | 0 | 296,197,828 | 22.5% | ||
eleonardo | 0 | 181,972,552 | 10% | ||
zohaib715 | 0 | 336,457,645 | 50% | ||
naideth | 0 | 390,190,554 | 50% | ||
evilest-fiend | 0 | 2,674,167,066 | 100% | ||
azwarrangkuti | 0 | 64,199,334,052 | 100% | ||
shenoy | 0 | 10,331,810,161 | 10% | ||
studytext | 0 | 149,999,887 | 25% | ||
checkthisout | 0 | 822,373,978 | 50% | ||
navx | 0 | 1,606,999,590 | 70% | ||
handfree42 | 0 | 107,088,069 | 50% | ||
ilovekrys | 0 | 220,302,784 | 50% | ||
family.app | 0 | 118,511,659 | 100% | ||
not-a-cat | 0 | 1,139,232,326 | 100% | ||
varja | 0 | 164,833,937 | 50% | ||
maphics | 0 | 106,304,356 | 100% | ||
sebastiengllmt | 0 | 300,953,153 | 50% | ||
utopian-1up | 0 | 4,715,619,757 | 100% | ||
ewq | 0 | 745,289,769 | 3% | ||
phgnomo | 0 | 246,489,675 | 5% | ||
carsonroscoe | 0 | 13,641,040,557 | 80% | ||
zlatkamrs | 0 | 293,269,788 | 50% | ||
salahudeen | 0 | 125,755,645 | 35% | ||
amosbastian | 0 | 15,283,602,000 | 50% | ||
mountainjewel | 0 | 1,059,250,790 | 5% | ||
xplore | 0 | 741,528,231 | 50% | ||
layanmarissa | 0 | 219,953,367 | 50% | ||
proffgodswill | 0 | 61,368,512 | 10% | ||
bitcoin.news | 0 | 189,590,485 | 50% | ||
sweeverdev | 0 | 1,058,578,875 | 50% | ||
kodeblacc | 0 | 3,277,166,147 | 50% | ||
devilonwheels | 0 | 1,795,096,683 | 10% | ||
thescholarlyowl | 0 | 3,847,341,475 | 50% | ||
jerybanfield | 0 | 5,716,350,386 | 100% | ||
rhotimee | 0 | 374,179,214 | 50% | ||
kekegist | 0 | 905,120,652 | 100% | ||
jrmiller87 | 0 | 2,506,644,682 | 100% | ||
solomon507 | 0 | 216,849,854 | 50% | ||
patatesyiyen | 0 | 62,109,084 | 12.5% | ||
deejee | 0 | 122,966,840 | 20% | ||
rsteem | 0 | 342,114,450 | 50% | ||
ahmetterkir | 0 | 557,808,462 | 100% | ||
thabiggdogg | 0 | 6,391,355,851 | 50% | ||
onin91 | 0 | 438,430,576 | 50% | ||
isabella394 | 0 | 2,603,181,513 | 100% | ||
emailbox19149 | 0 | 211,587,208 | 50% | ||
cheesom | 0 | 261,739,220 | 50% | ||
matthiasjohn | 0 | 247,502,206 | 50% | ||
lemony-cricket | 0 | 9,942,681,563 | 20% | ||
josephace135 | 0 | 12,167,596,009 | 100% | ||
minnowboosted | 0 | 287,467,999 | 50% | ||
saifannur-mzy | 0 | 263,891,387 | 50% | ||
yeswanth | 0 | 611,877,576 | 100% | ||
orlandumike | 0 | 4,286,184,397 | 25% | ||
kaking | 0 | 232,498,091 | 50% | ||
exploreand | 0 | 1,178,382,815 | 25% | ||
petvalbra | 0 | 611,591,463 | 100% | ||
steemassistant | 0 | 442,492,932 | 100% | ||
hmctrasher | 0 | 407,241,365 | 10% | ||
photohunter1 | 0 | 4,038,640,929 | 100% | ||
photohunter3 | 0 | 3,190,760,156 | 100% | ||
photohunter4 | 0 | 3,178,875,661 | 100% | ||
photohunter5 | 0 | 3,171,563,516 | 100% | ||
howtosteem | 0 | 3,292,271,835 | 100% | ||
marketstack | 0 | 6,382,267,074 | 0.85% | ||
livsky | 0 | 101,941,001 | 50% | ||
tailslide | 0 | 217,344,304 | 50% | ||
polbot | 0 | 982,159,086 | 100% | ||
roj | 0 | 2,199,687,308 | 100% | ||
antigenx | 0 | 668,356,699 | 10% | ||
raoul.poenar | 0 | 3,554,155,639 | 50% | ||
andiepumpgun | 0 | 250,869,482 | 50% | ||
johnnyyy | 0 | 587,038,552 | 100% | ||
pizzalocale | 0 | 147,647,843 | 25% | ||
aderemi01 | 0 | 1,778,856,750 | 50% | ||
soykatherine | 0 | 217,219,802 | 50% | ||
avnigenc | 0 | 1,818,986,065 | 100% | ||
sampath94 | 0 | 221,212,954 | 50% | ||
killbill73 | 0 | 192,582,046 | 50% | ||
amirdesaingrafis | 0 | 566,491,400 | 50% | ||
fai.zul | 0 | 296,856,079 | 50% | ||
nightdragon | 0 | 249,182,946 | 50% | ||
reazuliqbal | 0 | 3,141,693,125 | 50% | ||
aliyu-s | 0 | 478,806,719 | 50% | ||
treasureteam | 0 | 54,375,802,264 | 25% | ||
muratti | 0 | 55,002,340 | 10% | ||
hakancelik | 0 | 7,264,380,984 | 100% | ||
flinter | 0 | 156,333,061 | 50% | ||
opulence | 0 | 1,808,216,466 | 50% | ||
phasma | 0 | 122,612,788 | 20% | ||
masjenk | 0 | 156,236,138 | 50% | ||
muratkbesiroglu | 0 | 12,890,611,357 | 5% | ||
pixelproperty | 0 | 2,210,918,468 | 100% | ||
carlitojoshua | 0 | 160,004,811 | 50% | ||
donjyde | 0 | 223,526,161 | 50% | ||
nonsqtr | 0 | 488,715,120 | 50% | ||
steemia-io | 0 | 42,600,693,230 | 100% | ||
crispycoinboys | 0 | 2,136,922,181 | 30% | ||
gwapoaller | 0 | 307,097,758 | 50% | ||
carloniere | 0 | 133,604,614 | 50% | ||
mrgranville | 0 | 493,758,650 | 100% | ||
bluestorm | 0 | 460,899,167 | 75% | ||
dexter24 | 0 | 216,926,972 | 50% | ||
jayo | 0 | 183,950,080 | 50% | ||
pepememes | 0 | 206,392,348 | 50% | ||
knot | 0 | 3,097,061,559 | 50% | ||
qurator-tier-0 | 0 | 6,964,808,851 | 2% | ||
ahmad097 | 0 | 221,380,016 | 50% | ||
animesukidesu | 0 | 159,582,115 | 50% | ||
feronio | 0 | 6,566,317,542 | 100% | ||
wealth4good | 0 | 295,544,014 | 5% | ||
esme-svh | 0 | 302,284,886 | 50% | ||
lsanek | 0 | 287,794,782 | 50% | ||
lykia | 0 | 297,325,766 | 50% | ||
realness | 0 | 306,475,624 | 50% | ||
wise-confucius | 0 | 350,939,719 | 50% | ||
musicbot | 0 | 106,733,807 | 100% | ||
flugbot | 0 | 122,724,728 | 100% | ||
lemcriq | 0 | 53,806,130 | 20% | ||
flag-haejin | 0 | 367,195,885 | 50% | ||
haejin-sucks | 0 | 496,659,189 | 50% | ||
steemit-abuse | 0 | 104,820,313 | 50% | ||
ernoldlvb | 0 | 125,010,539 | 50% | ||
born2crypto | 0 | 391,188,792 | 50% | ||
kryptogermany | 0 | 241,584,432 | 50% | ||
gydronium | 0 | 143,702,605 | 30% | ||
clevershovel | 0 | 1,541,045,548 | 20% | ||
masterofdisaster | 0 | 251,422,310 | 50% | ||
crashbandicoot | 0 | 248,818,800 | 50% | ||
nazmulrana | 0 | 220,518,458 | 50% | ||
cute-teen | 0 | 175,112,491 | 50% | ||
truthtrader | 0 | 5,018,986,790 | 4% | ||
gnaimul | 0 | 217,209,464 | 50% | ||
rancho-relaxo | 0 | 71,543,299 | 50% | ||
xbox-gamer | 0 | 71,522,442 | 50% | ||
niouton | 0 | 8,395,607,908 | 40% | ||
liveran | 0 | 557,327,064 | 50% | ||
openanimus | 0 | 13,073,907,142 | 50% | ||
steemitcanarias | 0 | 104,006,983 | 30% | ||
editorspicks | 0 | 61,230,367 | 50% | ||
downtempo | 0 | 153,069,532 | 25% | ||
syahrin | 0 | 219,949,270 | 50% | ||
cryptocopy | 0 | 305,823,080 | 50% | ||
artsyunicorn | 0 | 221,242,676 | 50% | ||
cryptouru | 0 | 3,876,923,901 | 100% | ||
steemfunder | 0 | 282,144,549 | 50% | ||
solpaman | 0 | 305,708,885 | 50% | ||
femidada | 0 | 217,111,247 | 50% | ||
arithmatic | 0 | 247,774,489 | 50% | ||
steemit-username | 0 | 137,726,954 | 50% | ||
oezixxx | 0 | 485,152,415 | 100% | ||
ongolodesire | 0 | 217,048,536 | 50% | ||
special-agent | 0 | 58,773,027 | 50% |
Thank you for the contribution It has been approved. ---------------------------------------------------------------------- Need help? Write a ticket on https://support.utopian.io. Chat with us on [Discord](https://discord.gg/uTyJkNm). **[[utopian-moderator]](https://utopian.io/moderators)**
author | portugalcoin | ||||||
---|---|---|---|---|---|---|---|
permlink | re-hsynterkr-ipfs-tutorial-2-build-a-nodejs-app-for-ipfs-20180430t121007059z | ||||||
category | utopian-io | ||||||
json_metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} | ||||||
created | 2018-04-30 12:10:12 | ||||||
last_update | 2018-04-30 12:10:12 | ||||||
depth | 1 | ||||||
children | 0 | ||||||
last_payout | 2018-05-07 12:10:12 | ||||||
cashout_time | 1969-12-31 23:59:59 | ||||||
total_payout_value | 0.000 HBD | ||||||
curator_payout_value | 0.000 HBD | ||||||
pending_payout_value | 0.000 HBD | ||||||
promoted | 0.000 HBD | ||||||
body_length | 294 | ||||||
author_reputation | 598,828,312,571,988 | ||||||
root_title | "[IPFS Tutorial #2] - Build a NodeJS app for IPFS" | ||||||
beneficiaries |
| ||||||
max_accepted_payout | 1,000,000.000 HBD | ||||||
percent_hbd | 10,000 | ||||||
post_id | 53,021,336 | ||||||
net_rshares | 0 |
<div class="pull-left"><img src="" /></div> <center>You just received a Tier 0 upvote! Looking for bigger rewards? Click [here](https://steemit.com/qurator/@qurator/qurator-tier-changes) and learn how to get them or visit us on [Discord](https://discord.gg/nhQehdv)</center>
author | qurator-tier-0 |
---|---|
permlink | re-ipfs-tutorial-2-build-a-nodejs-app-for-ipfs-20180430t051649 |
category | utopian-io |
json_metadata | "" |
created | 2018-04-30 05:16:51 |
last_update | 2018-04-30 05:16:51 |
depth | 1 |
children | 0 |
last_payout | 2018-05-07 05:16:51 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 0.000 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 377 |
author_reputation | 59,310,010,441 |
root_title | "[IPFS Tutorial #2] - Build a NodeJS app for IPFS" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 52,963,517 |
net_rshares | 0 |
#### Hey @hsynterkr We're already looking forward to your next contribution! ##### Decentralised Rewards Share your expertise and knowledge by rating contributions made by others on Utopian.io to help us reward the best contributions together. ##### Utopian Witness! <a href="https://v2.steemconnect.com/sign/account-witness-vote?witness=utopian-io&approve=1">Vote for Utopian Witness!</a> We are made of developers, system administrators, entrepreneurs, artists, content creators, thinkers. We embrace every nationality, mindset and belief. **Want to chat? Join us on Discord https://discord.me/utopian-io**
author | utopian-io |
---|---|
permlink | re-hsynterkr-ipfs-tutorial-2-build-a-nodejs-app-for-ipfs-20180502t020054667z |
category | utopian-io |
json_metadata | {"tags":["utopian-io"],"community":"utopian","app":"utopian/1.0.0"} |
created | 2018-05-02 02:00:57 |
last_update | 2018-05-02 02:00:57 |
depth | 1 |
children | 0 |
last_payout | 2018-05-09 02:00:57 |
cashout_time | 1969-12-31 23:59:59 |
total_payout_value | 4.222 HBD |
curator_payout_value | 0.000 HBD |
pending_payout_value | 0.000 HBD |
promoted | 0.000 HBD |
body_length | 609 |
author_reputation | 152,955,367,999,756 |
root_title | "[IPFS Tutorial #2] - Build a NodeJS app for IPFS" |
beneficiaries | [] |
max_accepted_payout | 1,000,000.000 HBD |
percent_hbd | 10,000 |
post_id | 53,347,758 |
net_rshares | 742,029,428,527 |
author_curate_reward | "" |
voter | weight | wgt% | rshares | pct | time |
---|---|---|---|---|---|
utopian-io | 0 | 742,029,428,527 | 0.1% |