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
This commit is contained in:
Acid Chicken (硫酸鶏) 2019-01-13 18:21:10 +09:00 committed by syuilo
parent 49ebd7a040
commit a883e70ad4
4 changed files with 23 additions and 1 deletions

View file

@ -43,6 +43,7 @@
"@types/gulp-uglify": "3.0.6", "@types/gulp-uglify": "3.0.6",
"@types/gulp-util": "3.0.34", "@types/gulp-util": "3.0.34",
"@types/is-root": "1.0.0", "@types/is-root": "1.0.0",
"@types/is-svg": "3.0.0",
"@types/is-url": "1.2.28", "@types/is-url": "1.2.28",
"@types/js-yaml": "3.11.4", "@types/js-yaml": "3.11.4",
"@types/katex": "0.5.0", "@types/katex": "0.5.0",
@ -136,6 +137,7 @@
"http-signature": "1.2.0", "http-signature": "1.2.0",
"insert-text-at-cursor": "0.1.1", "insert-text-at-cursor": "0.1.1",
"is-root": "2.0.0", "is-root": "2.0.0",
"is-svg": "3.0.0",
"is-url": "1.2.4", "is-url": "1.2.4",
"js-yaml": "3.12.0", "js-yaml": "3.12.0",
"jsdom": "13.1.0", "jsdom": "13.1.0",

View file

@ -4,10 +4,11 @@ import * as fs from 'fs';
import * as mongodb from 'mongodb'; import * as mongodb from 'mongodb';
import * as crypto from 'crypto'; import * as crypto from 'crypto';
import * as debug from 'debug'; import * as debug from 'debug';
import fileType = require('file-type');
import * as Minio from 'minio'; import * as Minio from 'minio';
import * as uuid from 'uuid'; import * as uuid from 'uuid';
import * as sharp from 'sharp'; 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 DriveFile, { IMetadata, getDriveFileBucket, IDriveFile } from '../../models/drive-file';
import DriveFolder from '../../models/drive-folder'; import DriveFolder from '../../models/drive-folder';
@ -320,6 +321,8 @@ export default async function(
const type = fileType(buffer); const type = fileType(buffer);
if (type) { if (type) {
res([type.mime, type.ext]); res([type.mime, type.ext]);
} else if (isSvg(buffer)) {
res(['image/svg+xml', 'svg'])
} else { } else {
// 種類が同定できなかったら application/octet-stream にする // 種類が同定できなかったら application/octet-stream にする
res(['application/octet-stream', null]); res(['application/octet-stream', null]);

View file

@ -808,6 +808,20 @@ describe('API', () => {
expect(res).have.status(400); 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', () => { describe('drive/files/update', () => {

BIN
test/resources/image.svg (Stored with Git LFS) Normal file

Binary file not shown.