Javascript 多个同名文件未在环回中上载
我正在使用RESTAPI url环回3上传文件。提交表单后,将插入值并保存文件。现在,如果我上传的文件与已经存在的文件相同,则该文件不会被存储。如何重命名该文件,然后使用一些随机数并保存 HTMLJavascript 多个同名文件未在环回中上载,javascript,jquery,file-upload,loopbackjs,file-rename,Javascript,Jquery,File Upload,Loopbackjs,File Rename,我正在使用RESTAPI url环回3上传文件。提交表单后,将插入值并保存文件。现在,如果我上传的文件与已经存在的文件相同,则该文件不会被存储。如何重命名该文件,然后使用一些随机数并保存 HTML 尝试根据创建顺序对它们进行不同的命名。我已经阅读了您的请求,我知道您正在尝试使用环回上传文件。即使使用环回上传也可以正常工作,但您的要求是上传同名文件,对吗 如果是,则通过在“u v1”结尾行添加一些关键文本来使用版本控制存储文件,您可以在新上载时检查增量值。或者,一个简单的方法是,您可以以Unix格
尝试根据创建顺序对它们进行不同的命名。我已经阅读了您的请求,我知道您正在尝试使用环回上传文件。即使使用环回上传也可以正常工作,但您的要求是上传同名文件,对吗 如果是,则通过在“u v1”结尾行添加一些关键文本来使用版本控制存储文件,您可以在新上载时检查增量值。或者,一个简单的方法是,您可以以Unix格式连接时间戳,时间戳是一系列数字,每秒钟都是唯一的。因此,您可以将此名称保存在DB中以供参考 例如:
您需要在上传的每个文件的文件名中添加一些独特的内容。最简单(可能不是最好)的方法是添加当前时间戳 将文件追加到FormData对象的语法为:
FormData.append(名称、值)
或formData.append(名称、值、文件名)代码>。如果使用第一个版本并跳过filename
参数,则默认为file
的name
属性
在您的情况下,您不需要默认文件名,您需要向其添加时间戳。
您可以使用Date.now()
或new Date().getTime()
获取当前时间戳。在这种情况下,最好使用Date.now()
,因为它比new Date().getTime()快两倍多(而且打字也更少)
因此,您现在可以生成一个唯一的文件名,如下所示:
`${Date.now()}_${file.name}`
Date.now() + '_' + file.name
我们把时间放在第一位,因为file.name
包含文件扩展名,而您需要它。
这将生成如下内容'1553690001341\u whatever.jpg'
但如果将文件名放在第一位,您将得到“whatever.jpg_1553690001341”
,因此该文件不会以文件扩展名保存在服务器上,如果有人从服务器下载该文件,他们将不知道如何打开它
我们还使用反勾号来使用字符串中的变量,这只是让事情变得更简单。如果不使用反勾号,则可以使用+
获得相同的结果,如下所示:
`${Date.now()}_${file.name}`
Date.now() + '_' + file.name
现在,您需要做的就是在将文件追加到FormData时也添加文件名。所以写
fd.append('file', file, `${Date.now()}_${file.name}`);
而不是
fd.append('file', file);
PS:像这样的事情应该由后端API来处理看起来您正在使用
我建议在创建数据源时只需使用nameConflict
属性,如以下示例所示-因为看起来您已经检索了已上载的文件名:
在环回的server/server.js中
var ds = loopback.createDataSource({
connector: require('loopback-component-storage'),
provider: 'filesystem',
root: path.join(__dirname, 'attachments'),
nameConflict: 'makeUnique' // simply add this line!
});
var container = ds.createModel('attachments');
保存时,环回可以重命名文件本身:
我想用一些随机数,后跟文档名来重命名。我想把它保存在数据库和文件位置,但是如何,这取决于您想保存它的位置和方式。我想将它保存到数据库中,并将文件存储在代码APIRL+“附件/简历/上传”中提到的位置。您能给出一些代码示例吗,或者您可以编辑上面的代码变量filename=filename+“\u'+新日期()。getTime();这将给你唯一的文件名,我可以随时重命名,但我不能插入或存储。加载资源失败:服务器响应状态为400(错误请求)。您不应该在后端(API)而不是前端处理此问题吗。如果您想在前端使用此功能,可以在文件名前面加上当前时间戳,如下所示:fd.append('file',file,`${Date.now()}{file.name}`)代码>将时间戳放在文件名之前以保留文件扩展名。请您在我的代码中编辑并解释替换您的行fd.append('file',file)
insidesendFile
方法和fd.append('file',file,`${Date.now()}{file.name}')代码>。如果它对你有效,我将添加一个解释的答案。请注意,它不是单引号围绕着${Date.now()}{file.name}
,它是键盘上选项卡上的按钮,它叫backtick
或back quote
,非常感谢你为meGreat节省了我的时间,我将添加一个答案并给出适当的解释。我们能在attachment.js文件中得到文件名吗,其中附件是我的文件存储模块。如何在loopback model.js文件中获取文件名我从未使用过loopback,我使用python for api。但是你可以在google上搜索它,我很确定stackoverflow上已经有了答案。看起来你需要:file.originalname
如何获取文件名我们可以在js文件中获取附加的文件名吗?你不是已经在这一行中做了这样的操作:var ds = loopback.createDataSource({
connector: require('loopback-component-storage'),
provider: 'filesystem',
root: path.join(__dirname, 'attachments'),
nameConflict: 'makeUnique' // simply add this line!
});
var container = ds.createModel('attachments');