You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Uppy上传文件的修改文件名传递至服务器?

问题解决:Uppy修改文件名后XHR上传不生效

问题原因

你在onBeforeFileAdded中修改了文件对象的name字段,但Uppy的XHRUpload组件默认不会直接将这个name作为上传到服务器的文件名。控制台显示的是Uppy内部管理的文件信息,但实际上传流程中,组件可能仍使用原始文件名,或者需要通过meta属性指定上传文件名。另外你的XHRUpload配置存在语法错误(endpoint后缺少逗号),这也可能影响功能正常运行。

修复步骤

1. 先修复语法错误

修改XHRUpload配置,在endpoint后添加逗号:

.use(XHRUpload, {
    endpoint: uploadUrl, // 补上缺失的逗号
    fieldName: 'my_file',
    limit: limit,
    headers: {
        'clientResize': clientResizeEnabled.toString()
    }
})

2. 修改文件的meta.filename属性

在onBeforeFileAdded中,同时修改文件的name和meta.filename,XHRUpload会优先使用meta.filename作为上传文件名:

onBeforeFileAdded: (currentFile, files) => {
    console.log(currentFile.data.lastModified);
    datePhotoTaken = currentFile.data.lastModified;
    const newFileName = currentFile.data.lastModified + ".jpg";
    const modifiedFile = {
        ...currentFile,
        name: newFileName,
        meta: {
            ...currentFile.meta,
            filename: newFileName // 指定上传用的文件名
        }
    }
    return modifiedFile
},

备选方案:自定义formData

如果上述方法不生效,可以通过XHRUpload的formData函数手动构建表单数据,强制指定文件名:

.use(XHRUpload, {
    endpoint: uploadUrl,
    fieldName: 'my_file',
    limit: limit,
    headers: {
        'clientResize': clientResizeEnabled.toString()
    },
    formData: (file, meta) => {
        const formData = new FormData();
        // 手动添加文件,第三个参数即为上传到服务器的文件名
        formData.append('my_file', file.data, meta.filename || file.name);
        // 若有其他表单字段,可在此继续添加
        return formData;
    }
})

内容的提问来源于stack exchange,提问作者user1605822

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 03:54:28