我正在开发一个html页面,其中包含一个允许用户输入信息和上传文件的表单。所有信息都将插入Mysql数据库中。
在Javascript中,我使用XMLHttpRequest将文件发送到服务器,使用“upload.php”重命名(以避免重复名称)并将其移动到上传目录中。
为了更好的用户体验,这将在提交整个表单之前完成。
我的问题是:我如何存储新的文件名(在upload.php中定义),以便在表单提交“submit.php”中使用它们? 原因是在“submit.php”中,我首先在“user”表中插入用户信息,然后选择将在“files”表中插入文件名的“user_id”(自动增量)。
php会话可以成为一种方法吗?有另一种方式吗?谢谢你的帮助
HTML:
<form action="submit.php" method="post" id="submitform">
<div>
<--!user info part1-->
</div>
<div id="filesContainer" class="eltContainer">
<input type="file" id="filesList" multiple>
</div>
<div>
<--!user info part2-->
</div>
的javascript:
var fd = new FormData()
var xhr = new XMLHttpRequest()
for (var i=0,nb = fichiers.length; i<nb; i++) {
var fichier = fichiers[i]
fd.append(fichier.name,fichier)
}
xhr.open('POST', 'upload.php', true)
upload.php:
<?php
foreach($_FILES as $file){
$filename = date('Y') . date('m') . date('d') . date('H') . date('i') . basename($_FILES[$file]['name']);
move_uploaded_file( $file['tmp_name'],"../upload_dir/" .$filename);
}
exit;
答案 0 :(得分:1)
我会考虑使用类似md5的内容来获取唯一的文件名。
尽管如此,您可以将文件名推送到某个数组中,然后返回这些文件名,作为发布请求的结果,并将它们放回到某个输入字段中。
要检索回复,只需将此行添加到var allValues = from p in _pContext.Persons.Include("Items.Properties")
where p.Id == currentPerson.Id
from i in p.Items //This is a list that contains "Items"
select i;
open
如果您想考虑使用简单的库来处理AJAX请求,例如axios。它是基于承诺的浏览器HTTP客户端,使用起来非常简单,节省了您的时间和精力,因为您不必记住您刚才写的所有这些内容。
这是一种方法,但我认为你也可以使用xhr.onreadystatechange = function {
// If the request completed and status is OK
if (req.readyState == 4 && req.status == 200) {
// keep in mind that fileNames here are JSON string
// as you should call json_encode($arrayOfFilenames)
// in your php script (upload.php)
var fileNames = xhr.responseText;
}
}
,它完全有效。我的猜测是你此时没有登录用户,所以我的想法如下:
将文件名放入$_SESSION
使用数据库事务 - 如@Marc B建议的那样 - 用于连接文件 用户
如果没有错误,只需从$ _SESSION中删除文件名,如果有的话,只需将用户重定向回表单(可能有一些信息出错了),这样他就不会必须重新上传文件,因为文件名仍在$_SESSION