Preserve multipart selection order when uploading multiple assets
This commit is contained in:
@@ -19,15 +19,16 @@ export async function upload(req:NextApiRequest,res:NextApiResponse,policy:Uploa
|
||||
try{
|
||||
sameOrigin(req);
|
||||
const form=formidable({maxFileSize:250*1024*1024,maxTotalFileSize:1024*1024*1024,maxFiles:16,allowEmptyFiles:false});
|
||||
form.on('fileBegin',(_name,file)=>temporary.push(file.filepath));
|
||||
const [fields,files]=await form.parse(req);
|
||||
// file completion events can finish out of order; preserve multipart selection order.
|
||||
const items:File[]=[];
|
||||
form.on('fileBegin',(_name,file)=>{temporary.push(file.filepath);items.push(file)});
|
||||
const [fields]=await form.parse(req);
|
||||
const assetOnly=z.enum(['true','false']).default('false').parse(fields.assetOnly?.[0])==='true';
|
||||
const kind=z.enum(['image','video','audio']).parse(policy.validateImage?'image':fields.kind?.[0]);
|
||||
const title=z.string().trim().min(1).max(200).parse(fields.title?.[0]||policy.defaultTitle||(assetOnly?'上传素材':undefined));
|
||||
const slug=z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).max(120).optional().parse(fields.slug?.[0]);
|
||||
const description=z.string().trim().max(100000).parse(fields.description?.[0]||'');
|
||||
const tagIds=z.array(z.uuid()).max(50).parse(JSON.parse(fields.tags?.[0]||'[]'));
|
||||
const items=Object.values(files).flat().filter(Boolean) as File[];
|
||||
if(!items.length) return res.status(400).json({error:'请选择文件'});
|
||||
const records:{id:string;key:string;mime:string;width:number|undefined;height:number|undefined;duration:number|undefined;hasAudio:boolean|null;size:number;hash:string;filename:string}[]=[];
|
||||
for(const file of items){
|
||||
|
||||
Reference in New Issue
Block a user