Я пишу обработчик как лямбда-функцию AWS, которая должна обернуть содержимое в файл docx. Я использую Content-Disposition в заголовках ответов, чтобы достичь цели. Ниже приведен код, который я написал до сих пор:
//Process Array Buffer and extract the plain content out of it
export const extractContent = async (data: Buffer) => {
return new Promise((resolve, reject) =>
textract.fromBufferWithMime(
"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
data,
{ preserveLineBreaks: true },
(err, content) => {
if (err) {
reject(err);
} else {
resolve(content);
}
}
)
);
};
export const handlerName = async (
event: APIGatewayProxyEvent
): Promise<APIGatewayProxyResult> => {
if (event.body === null) {
return ErrorResponse;
}
const result = await class.func(JSON.parse(event.body)); //returns an array buffer object
if (result instanceof Error) {
return ErrorResponse;
}
const content = await extractContent(result.data)
.then(res => res)
.catch(err => err);
const headers = {
"Access-Control-Allow-Origin": "*",
"Strict-Transport-Security": "'max-age=31536000'",
"Access-Control-Expose-Headers": "Content-Disposition",
"Content-Disposition": attachment; filename=fn.docx; filename*=UTF-8''fn.docx,
"Content-Type": "application/vnd.ms-word.document"
};
return {
body: content,
headers,
statusCode: 200,
};
};
Теперь в APIGatewayResponse может быть возвращена только строка;следовательно, я не могу вернуть объект байта |поток |буфер вместо. Я могу загрузить файл DOCX, но он не открывается в MS-Word;Я всегда получаю подробную ошибку, что либо файл поврежден, либо какая-то часть неверна или отсутствует.
Я уже пробовал закодированную строку base64, но все еще не смог получить желаемое. Пожалуйста, предложите решение для этого.
Я пишу обработчик в машинописном узле, используя инфраструктуру SLS.