You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					65 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					65 lines
				
				1.6 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict'
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const fastify = require('fastify')()
							 | 
						||
| 
								 | 
							
								const fs = require('fs')
							 | 
						||
| 
								 | 
							
								const util = require('util')
							 | 
						||
| 
								 | 
							
								const path = require('path')
							 | 
						||
| 
								 | 
							
								const { pipeline } = require('stream')
							 | 
						||
| 
								 | 
							
								const pump = util.promisify(pipeline)
							 | 
						||
| 
								 | 
							
								const form = path.join(__dirname, '..', 'form.html')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.register(require('..'))
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.get('/', function (req, reply) {
							 | 
						||
| 
								 | 
							
								  reply.type('text/html').send(fs.createReadStream(form))
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.post('/upload/stream/single', async function (req, reply) {
							 | 
						||
| 
								 | 
							
								  const data = await req.file()
							 | 
						||
| 
								 | 
							
								  await pump(data.file, fs.createWriteStream(data.filename))
							 | 
						||
| 
								 | 
							
								  reply.send()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.post('/upload/stream/single-buf', async function (req, reply) {
							 | 
						||
| 
								 | 
							
								  for await (const part of req.parts()) {
							 | 
						||
| 
								 | 
							
								    if (part.file) {
							 | 
						||
| 
								 | 
							
								      await part.toBuffer()
							 | 
						||
| 
								 | 
							
								      console.log(part)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  reply.send()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.post('/upload/stream/files', async function (req, reply) {
							 | 
						||
| 
								 | 
							
								  const parts = req.files()
							 | 
						||
| 
								 | 
							
								  for await (const part of parts) {
							 | 
						||
| 
								 | 
							
								    await pump(part.file, fs.createWriteStream(part.filename))
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  reply.send()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.post('/upload/raw/any', async function (req, reply) {
							 | 
						||
| 
								 | 
							
								  const parts = req.parts()
							 | 
						||
| 
								 | 
							
								  for await (const part of parts) {
							 | 
						||
| 
								 | 
							
								    if (part.file) {
							 | 
						||
| 
								 | 
							
								      await pump(part.file, fs.createWriteStream(part.filename))
							 | 
						||
| 
								 | 
							
								    } else {
							 | 
						||
| 
								 | 
							
								      console.log(part)
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  reply.send()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.post('/upload/files', async function (req, reply) {
							 | 
						||
| 
								 | 
							
								  // stores files to tmp dir and return paths
							 | 
						||
| 
								 | 
							
								  const files = await req.saveRequestFiles()
							 | 
						||
| 
								 | 
							
								  console.log(files.map(f => f.filepath))
							 | 
						||
| 
								 | 
							
								  // tmp files cleaned up automatically
							 | 
						||
| 
								 | 
							
								  reply.send()
							 | 
						||
| 
								 | 
							
								})
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								fastify.listen(3000, err => {
							 | 
						||
| 
								 | 
							
								  if (err) throw err
							 | 
						||
| 
								 | 
							
								  console.log(`server listening on ${fastify.server.address().port}`)
							 | 
						||
| 
								 | 
							
								})
							 |