Skip to content
This repository was archived by the owner on Feb 12, 2024. It is now read-only.

Commit e1ecd32

Browse files
committed
add http resource
1 parent 78653b3 commit e1ecd32

File tree

3 files changed

+80
-0
lines changed

3 files changed

+80
-0
lines changed

src/core/ipfs/files.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const isStream = require('isstream')
99
const promisify = require('promisify-es6')
1010
const Duplex = require('stream').Duplex
1111
const multihashes = require('multihashes')
12+
const bs58 = require('bs58')
1213

1314
module.exports = function files (self) {
1415
return {

src/http-api/resources/files.js

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
'use strict'
22

33
const bs58 = require('bs58')
4+
const multihash = require('multihashes')
5+
const ndjson = require('ndjson')
6+
const multipart = require('ipfs-multipart')
47
const debug = require('debug')
58
const log = debug('http-api:files')
69
log.error = debug('http-api:files:error')
@@ -48,3 +51,67 @@ exports.cat = {
4851
})
4952
}
5053
}
54+
55+
exports.add = {
56+
handler: (request, reply) => {
57+
if (!request.payload) {
58+
return reply('Array, Buffer, or String is required.').code(400).takeover()
59+
}
60+
61+
const parser = multipart.reqParser(request.payload)
62+
63+
var filesParsed = false
64+
var filesAdded = 0
65+
66+
var serialize = ndjson.serialize()
67+
// hapi doesn't permit object streams: http://hapijs.com/api#replyerr-result
68+
serialize._readableState.objectMode = false
69+
70+
request.server.app.ipfs.files.createAddStream((err, fileAdder) => {
71+
if (err) {
72+
return reply({
73+
Message: err,
74+
Code: 0
75+
}).code(500)
76+
}
77+
78+
fileAdder.on('data', (file) => {
79+
serialize.write({
80+
Name: file.path,
81+
Hash: bs58.encode(file.node.multihash()).toString()
82+
})
83+
filesAdded++
84+
})
85+
86+
fileAdder.on('end', () => {
87+
if (filesAdded === 0 && filesParsed) {
88+
return reply({
89+
Message: 'Failed to add files.',
90+
Code: 0
91+
}).code(500)
92+
} else {
93+
serialize.end()
94+
return reply(serialize)
95+
.header('x-chunked-output', '1')
96+
.header('content-type', 'application/json')
97+
}
98+
})
99+
100+
parser.on('file', (fileName, fileStream) => {
101+
var filePair = {
102+
path: fileName,
103+
content: fileStream
104+
}
105+
filesParsed = true
106+
fileAdder.write(filePair)
107+
})
108+
109+
parser.on('end', () => {
110+
if (!filesParsed) {
111+
return reply("File argument 'data' is required.").code(400).takeover()
112+
}
113+
fileAdder.end()
114+
})
115+
})
116+
}
117+
}

src/http-api/routes/files.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,16 @@ module.exports = (server) => {
1515
handler: resources.files.cat.handler
1616
}
1717
})
18+
19+
api.route({
20+
method: '*',
21+
path: '/api/v0/add',
22+
config: {
23+
payload: {
24+
parse: false,
25+
output: 'stream'
26+
},
27+
handler: resources.files.add.handler
28+
}
29+
})
1830
}

0 commit comments

Comments
 (0)