diff --git a/packages/server/src/graphql/definitions/upload.js b/packages/server/src/graphql/definitions/upload.js index f9c00da7b669923aa252ea7ad4efdea31ffbef97..af30fd841d33196ffc131dab8f2d40e4c4e9084c 100644 --- a/packages/server/src/graphql/definitions/upload.js +++ b/packages/server/src/graphql/definitions/upload.js @@ -15,17 +15,15 @@ const resolvers = { const { stream, filename, encoding } = await file const raw = await randomBytes(16) - const outPath = path.join( - uploadsPath, - raw.toString('hex') + path.extname(filename), - ) + const generatedFilename = raw.toString('hex') + path.extname(filename) + const outPath = path.join(uploadsPath, generatedFilename) await fs.ensureDir(uploadsPath) const outStream = fs.createWriteStream(outPath) stream.pipe(outStream, { encoding }) return new Promise((resolve, reject) => { - outStream.on('finish', () => resolve({ filename: outPath })) + outStream.on('finish', () => resolve({ url: `/${generatedFilename}` })) outStream.on('error', reject) }) }, @@ -36,12 +34,12 @@ const typeDefs = ` scalar Upload extend type Mutation { - # Upload a file, store it on the server and return the generated file name + # Upload a file, store it on the server and return the file url upload(file: Upload!): UploadResult } type UploadResult { - filename: String + url: String } ` diff --git a/packages/server/test/graphql/upload_test.js b/packages/server/test/graphql/upload_test.js index 41bda25b4d2fb5115eda2c6e8ae440f7a9ca9dc8..3be8823ac670ddd0dd55a01d133f21c33fc1d9b5 100644 --- a/packages/server/test/graphql/upload_test.js +++ b/packages/server/test/graphql/upload_test.js @@ -22,7 +22,7 @@ describe('GraphQL uploads', () => { operationName: null, variables: { file: null }, query: - 'mutation ($file: Upload!) {\n upload(file: $file) {\n filename\n __typename\n }\n}\n', + 'mutation ($file: Upload!) {\n upload(file: $file) {\n url\n __typename\n }\n}\n', }), ) .field('map', JSON.stringify({ '0': ['variables.file'] })) @@ -30,7 +30,9 @@ describe('GraphQL uploads', () => { .set('Authorization', `Bearer ${token}`) expect(body).toMatchObject({ - data: { upload: { filename: expect.stringMatching(/\w{16}\.txt/) } }, + data: { + upload: { url: expect.stringMatching(/^\/\w{32}\.txt$/) }, + }, }) }) })