node-web-mvc
Version:
node spring mvc
43 lines (42 loc) • 2.07 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const MediaType_1 = __importDefault(require("../MediaType"));
const AbstractHttpMessageConverter_1 = __importDefault(require("./AbstractHttpMessageConverter"));
const Javascript_1 = __importDefault(require("../../../interface/Javascript"));
const Resource_1 = __importDefault(require("../../resources/Resource"));
const ByteArrayResource_1 = __importDefault(require("../../resources/ByteArrayResource"));
const HttpHeaders_1 = __importDefault(require("../HttpHeaders"));
const GzipResource_1 = __importDefault(require("../../resources/GzipResource"));
class ResourceHttpMessageConverter extends AbstractHttpMessageConverter_1.default {
constructor() {
super(MediaType_1.default.ALL);
}
supports(clazz) {
return Javascript_1.default.createTyper(clazz).isType(Resource_1.default);
}
async readInternal(servletContext) {
const buffer = await servletContext.request.readBodyAsBuffer();
return new ByteArrayResource_1.default(buffer);
}
async writeInternal(resource, servletContext) {
if (!resource) {
return;
}
const response = servletContext.response;
if (resource.mediaType) {
response.setHeader(HttpHeaders_1.default.CONTENT_TYPE, resource.mediaType.toString());
}
if (!(resource instanceof GzipResource_1.default)) {
// 由于gzip下,默认不希望将整个返回内容加载到内存,采用流式返回(且因为该方案无法获取压缩后大小,所以不设置content-length)
response.setHeader(HttpHeaders_1.default.CONTENT_LENGTH, resource.contentLength);
}
else {
response.setHeader(HttpHeaders_1.default.TRANSFER_ENCODING, 'chunked');
}
await resource.pipe(response.nativeResponse);
}
}
exports.default = ResourceHttpMessageConverter;