Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个同名文件未在环回中上载_Javascript_Jquery_File Upload_Loopbackjs_File Rename - Fatal编程技术网

Javascript 多个同名文件未在环回中上载

Javascript 多个同名文件未在环回中上载,javascript,jquery,file-upload,loopbackjs,file-rename,Javascript,Jquery,File Upload,Loopbackjs,File Rename,我正在使用RESTAPI url环回3上传文件。提交表单后,将插入值并保存文件。现在,如果我上传的文件与已经存在的文件相同,则该文件不会被存储。如何重命名该文件,然后使用一些随机数并保存 HTML 尝试根据创建顺序对它们进行不同的命名。我已经阅读了您的请求,我知道您正在尝试使用环回上传文件。即使使用环回上传也可以正常工作,但您的要求是上传同名文件,对吗 如果是,则通过在“u v1”结尾行添加一些关键文本来使用版本控制存储文件,您可以在新上载时检查增量值。或者,一个简单的方法是,您可以以Unix格

我正在使用RESTAPI url环回3上传文件。提交表单后,将插入值并保存文件。现在,如果我上传的文件与已经存在的文件相同,则该文件不会被存储。如何重命名该文件,然后使用一些随机数并保存

HTML


尝试根据创建顺序对它们进行不同的命名。

我已经阅读了您的请求,我知道您正在尝试使用环回上传文件。即使使用环回上传也可以正常工作,但您的要求是上传同名文件,对吗

如果是,则通过在“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)
inside
sendFile
方法和
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');