From 018837db0b9f25eeb554f49185d33e9c3969688f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Acid=20Chicken=20=28=E7=A1=AB=E9=85=B8=E9=B6=8F=29?= Date: Sun, 13 Jan 2019 18:21:10 +0900 Subject: [PATCH] Support SVG (#3883) * Update add-file.ts * Update package.json * Revert "Update add-file.ts" This reverts commit ba0fe83b54a44493447208dfb3cc304a60df6fdd. * Update add-file.ts * Update package.json * Update add-file.ts * Update add-file.ts * Create image.svg * Update api.ts --- package.json | 2 ++ src/services/drive/add-file.ts | 5 ++++- test/api.ts | 14 ++++++++++++++ test/resources/image.svg | Bin 0 -> 505 bytes 4 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 test/resources/image.svg diff --git a/package.json b/package.json index d0023df5ae..d3486d9fee 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "@types/gulp-uglify": "3.0.6", "@types/gulp-util": "3.0.34", "@types/is-root": "1.0.0", + "@types/is-svg": "3.0.0", "@types/is-url": "1.2.28", "@types/js-yaml": "3.11.4", "@types/katex": "0.5.0", @@ -136,6 +137,7 @@ "http-signature": "1.2.0", "insert-text-at-cursor": "0.1.1", "is-root": "2.0.0", + "is-svg": "3.0.0", "is-url": "1.2.4", "js-yaml": "3.12.0", "jsdom": "13.1.0", diff --git a/src/services/drive/add-file.ts b/src/services/drive/add-file.ts index 2ea8cdc3bd..38b150a639 100644 --- a/src/services/drive/add-file.ts +++ b/src/services/drive/add-file.ts @@ -4,10 +4,11 @@ import * as fs from 'fs'; import * as mongodb from 'mongodb'; import * as crypto from 'crypto'; import * as debug from 'debug'; -import fileType = require('file-type'); import * as Minio from 'minio'; import * as uuid from 'uuid'; import * as sharp from 'sharp'; +import * as fileType from 'file-type'; +import * as isSvg from 'is-svg'; import DriveFile, { IMetadata, getDriveFileBucket, IDriveFile } from '../../models/drive-file'; import DriveFolder from '../../models/drive-folder'; @@ -320,6 +321,8 @@ export default async function( const type = fileType(buffer); if (type) { res([type.mime, type.ext]); + } else if (isSvg(buffer)) { + res(['image/svg+xml', 'svg']) } else { // 種類が同定できなかったら application/octet-stream にする res(['application/octet-stream', null]); diff --git a/test/api.ts b/test/api.ts index a7142641d2..d82014e754 100644 --- a/test/api.ts +++ b/test/api.ts @@ -808,6 +808,20 @@ describe('API', () => { expect(res).have.status(400); })); + + it('SVGファイルを作成できる', async(async () => { + const izumi = await signup({ username: 'izumi' }); + + const res = await assert.request(server) + .post('/drive/files/create') + .field('i', izumi.token) + .attach('file', fs.readFileSync(__dirname + '/resources/image.svg'), 'image.svg'); + + expect(res).have.status(200); + expect(res.body).be.a('object'); + expect(res.body).have.property('name').eql('image.svg'); + expect(res.body).have.property('type').eql('image/svg+xml'); + })); }); describe('drive/files/update', () => { diff --git a/test/resources/image.svg b/test/resources/image.svg new file mode 100644 index 0000000000000000000000000000000000000000..1e2bf5b5bbaa6dc883d747046122e93222a96420 GIT binary patch literal 505 zcmcJM!EVAZ42JJ}3M-t`IL1r8i6RX|Z+nQT+W@Hpv{ns|j~zI1VV50ZD~^Brv$Ghc zEu4S)!_c_hIG$cZ$T?SeULAk8fe1e;}8(&IoWZ`#pz?*!S}xJ8#ilP z#y58G*|_&e0)m~73D}b=ie;H%>JY>W#H8_R4g##Uq?p&MMTrMOPpl7KRa&P*6^Ruz znU{4;48jnZp-ymZ=)yhHN}+B@FZAC?WK$cn6r|Gd9*I#lZF@zs3I4XEwN{Qb0jm=P X6~;O}UJ>f9t%u>1W=3Nlx_r6-BJFT- literal 0 HcmV?d00001