我想写一个通用的html模板。
我知道,如果你想上传文件,过去你需要在enctype="multipart/form-data"
代码中设置<form>
。
我想在我的通用模板中避免这种情况。
我该怎么办?我看到了这些解决方案:
enctype="multipart/form-data"
。enctype="multipart/form-data"
。背景:我很幸运,我不需要支持旧的浏览器。我不需要支持IE9或更早版本。
它的工作
我们在所有表单中使用enctype="multipart/form-data"
几个月(即使没有要上传的文件)。
有效。这使我们的模板更简单。对我而言,这是实现大目标的一个简单步骤&#34;无条件代码&#34;。
答案 0 :(得分:12)
在表单中上传文件时,您应该specify the encoding as "multipart/form-data"。
如果您希望保持表单的通用性,请在表单中省略此属性,并使用输入或按钮元素的formenctype attribute直接覆盖它(仅适用于支持HTML5的浏览器)。 在您的情况下,更改:
<form action="upload.php" method="post" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload Image" name="submit">
</form>
为:
<form action="upload.php" method="post">
Select image to upload:
<input type="file" name="fileToUpload" id="fileToUpload" formenctype="multipart/form-data">
<input type="submit" value="Upload Image" name="submit">
</form>
此外,您可以检查this question建议使用enctype="multipart/form-data"
始终的地方。
答案 1 :(得分:2)
I cannot comment directly so I have to write it as an answer.
The only difference I am aware of is in the backend if the backend is using PHP (have no clue if this affects Java/Python or any other language used in the backend apart from PHP).
If PHP is fetching the data from the $_POST
and $_FILES
superglobals then there should be no problem, you can always use it, but you might have troubles if you are using :
$post_content = file_get_contents('php://input')
.
As far as I can remember the content inside $post_content
becomes blank, or something similar (it might work with a single file but not multiple files, can't remember correctly...).
答案 2 :(得分:1)
你可以用javascript
来做var file = document.getElementById('file').files[0];
var reader = new FileReader();
reader.readAsText(file, 'UTF-8');
reader.onload = sendData;
function sendData(event) {
var result = event.target.result;
var fileName = document.getElementById('file').files[0].name;
$.post('/api/sendData', { data: result, name: fileName }, continueSubmission);
}
答案 3 :(得分:1)
我认为您应该选择始终使用enctype =“multipart / form-data”。。因为它能够发送任何数据类型。但是,由于您不需要管理与旧浏览器的向后兼容性,因此您不仅可以使用HTML5,还可以使用您在通用模板中所需的其他功能。
您可以查看此链接HTML5 Attributes
上提供的HTML 5属性此处提供了支持的版本和示例浏览器列表:Example and supported browsers.
我建议你添加一个过滤器/拦截器,它将从请求中获取所有参数,并放入一些数据结构或通用函数,帮助他们从请求中提取值,这将有助于后端开发人员从后台获取数据请求。
<form>
<input type=submit value=Submit formenctype="application/x-www-form-urlencoded">
</form>
您还可以编写一个javascript函数,该函数将在每个表单提交时调用,并将请求提交给服务器或属性或某些指定格式,即使客户端浏览器较旧也可以使用。
我希望它有所帮助。
答案 4 :(得分:-1)
在上传文件时,您始终需要在表单标记中使用enctype=" multipart/form-data"
。但是,如果您没有上传任何文件,则没有必要
谢谢:)
快乐的编码!