diff --git a/src/controllers/Upload/helpers/handleGoogleDrive.test.ts b/src/controllers/Upload/helpers/handleGoogleDrive.test.ts
index 1388ae281..f92902cd3 100644
--- a/src/controllers/Upload/helpers/handleGoogleDrive.test.ts
+++ b/src/controllers/Upload/helpers/handleGoogleDrive.test.ts
@@ -181,6 +181,35 @@ describe('handleGoogleDrive — native Google Apps mime types', () => {
expect(reqFiles[0].originalname).toMatch(/\.pdf$/);
});
+ it('derives size from the downloaded buffer, not the picker-reported sizeBytes', async () => {
+ const zeroSizeDoc = { ...baseDocFile, sizeBytes: 0 };
+ const req = makeReq([zeroSizeDoc]);
+ const res = makeRes();
+ const handleUpload = jest.fn();
+ mockedAxios.get.mockResolvedValue({
+ data: Buffer.from('
hello
'),
+ } as never);
+ await handleGoogleDrive(req, res as unknown as express.Response, handleUpload);
+ const reqFiles = (req as unknown as {
+ files: { size: number; buffer: Buffer }[];
+ }).files;
+ expect(reqFiles[0].size).toBeGreaterThan(0);
+ expect(Buffer.isBuffer(reqFiles[0].buffer)).toBe(true);
+ expect(handleUpload).toHaveBeenCalled();
+ });
+
+ it('requests arraybuffer responseType so bodies are not coerced to strings', async () => {
+ const req = makeReq([baseDocFile]);
+ const res = makeRes();
+ const handleUpload = jest.fn();
+ await handleGoogleDrive(req, res as unknown as express.Response, handleUpload);
+ expect(mockedAxios.get).toHaveBeenCalledWith(
+ 'google_drive',
+ expect.any(String),
+ expect.objectContaining({ responseType: 'arraybuffer' })
+ );
+ });
+
it('returns 400 and does not call handleUpload when googleDriveAuth is missing', async () => {
const req = makeReq([basePdfFile], undefined);
(req.body as Record).googleDriveAuth = undefined;
diff --git a/src/controllers/Upload/helpers/handleGoogleDrive.ts b/src/controllers/Upload/helpers/handleGoogleDrive.ts
index c49fb5229..30b72697d 100644
--- a/src/controllers/Upload/helpers/handleGoogleDrive.ts
+++ b/src/controllers/Upload/helpers/handleGoogleDrive.ts
@@ -75,20 +75,21 @@ export async function handleGoogleDrive(
req.files = await Promise.all(
files.map(async (file) => {
const { url, originalname } = resolveUrlAndName(file);
- const contents = await instrumentedAxios.get(
+ const contents = await instrumentedAxios.get(
'google_drive',
url,
{
headers: {
Authorization: `Bearer ${googleDriveAuth}`,
},
- responseType: 'blob',
+ responseType: 'arraybuffer',
}
);
+ const buffer = Buffer.from(contents.data);
return {
originalname,
- size: file.sizeBytes,
- buffer: contents.data,
+ size: buffer.length,
+ buffer,
};
})
);