fix: compute file field mime type on the server (#10394)

This commit is contained in:
Yury Semikhatsky 2021-11-17 18:12:26 -08:00 committed by GitHub
parent bd93fc499f
commit 0ca10da166
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 8 additions and 13 deletions

View File

@ -16,7 +16,6 @@
import fs from 'fs';
import path from 'path';
import * as mime from 'mime';
import * as util from 'util';
import { Serializable } from '../../types/structs';
import * as api from '../../types/types';
@ -283,11 +282,7 @@ export class APIResponse implements api.APIResponse {
}
}
type ServerFilePayload = {
name: string,
mimeType: string,
buffer: string,
};
type ServerFilePayload = NonNullable<channels.FormField['file']>;
function filePayloadToJson(payload: FilePayload): ServerFilePayload {
return {
@ -307,7 +302,6 @@ async function readStreamToJson(stream: fs.ReadStream): Promise<ServerFilePayloa
const streamPath: string = Buffer.isBuffer(stream.path) ? stream.path.toString('utf8') : stream.path;
return {
name: path.basename(streamPath),
mimeType: mime.getType(streamPath) || 'application/octet-stream',
buffer: buffer.toString('base64'),
};
}

View File

@ -253,7 +253,7 @@ export type FormField = {
value?: string,
file?: {
name: string,
mimeType: string,
mimeType?: string,
buffer: Binary,
},
};

View File

@ -224,7 +224,7 @@ FormField:
type: object?
properties:
name: string
mimeType: string
mimeType: string?
buffer: binary
APIRequestContext:

View File

@ -153,7 +153,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme {
value: tOptional(tString),
file: tOptional(tObject({
name: tString,
mimeType: tString,
mimeType: tOptional(tString),
buffer: tBinary,
})),
});

View File

@ -14,7 +14,8 @@
* limitations under the License.
*/
import * as types from './types';
import mime from 'mime';
import * as channels from '../protocol/channels';
export class MultipartFormData {
private readonly _boundary: string;
@ -35,10 +36,10 @@ export class MultipartFormData {
this._finishMultiPartField();
}
addFileField(name: string, value: types.FilePayload) {
addFileField(name: string, value: NonNullable<channels.FormField['file']>) {
this._beginMultiPartHeader(name);
this._chunks.push(Buffer.from(`; filename="${value.name}"`));
this._chunks.push(Buffer.from(`\r\ncontent-type: ${value.mimeType || 'application/octet-stream'}`));
this._chunks.push(Buffer.from(`\r\ncontent-type: ${value.mimeType || mime.getType(value.name) || 'application/octet-stream'}`));
this._finishMultiPartHeader();
this._chunks.push(Buffer.from(value.buffer, 'base64'));
this._finishMultiPartField();