2017-07-12 48 views
1

我想写一个通用的html模板。使用`enctype =“multipart/form-data”`永远或永远不会?

我知道在过去需要在<form>标记中设置enctype="multipart/form-data",如果您想上传文件。

我想在我的通用模板中避免这种情况。

我该怎么办?我看到这些解决方案:

  • 总是使用enctype="multipart/form-data"
  • 使用enctype="multipart/form-data"从来没有。

背景:我很幸运,我不需要支持旧浏览器。我不需要支持IE9或更旧的版本。

+1

使用它总是没有坏处做。 –

+0

@先生使用它始终没有伤害。尼斯。现代Web浏览器仍需要它吗? – guettli

+0

我假设是..自从长时间以来没有使用表单上传,但提及multipart/form-data明确指出您有文件上传字段。可以把它看作是可选择的表单上传的网站,但即使没有提供该文件,属性也会保持原样。所以在所有形式上定义它都没有什么坏处。 –

回答

3

在上传表单中的文件时,您应该使用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> 

此外,您还可以检查这个问题,建议在哪里避免使用始终enctype="multipart/form-data"Why not always use enctype="multipart/form-data"?

+0

我认为他已经知道这一切 –

+0

这是一种在表单中不会**使用'enctype =“multipart/form-data”'的方法,它可以回答他的问题。 –

+0

@先生,你认为我已经知道了吗?我知道一点,但不多。对于我而言,您可以设置每个输入元素的formenctype。 – guettli

1

我不能直接评论,所以我必须写它作为答案。

我知道的唯一区别是后端如果后端使用PHP(如果这影响Java/Python或除PHP之外的后端中使用的任何其他语言)。

如果PHP被取出由$_POST$_FILES超全局数据那么就应该没有问题,你可以随时使用它,但你可能有麻烦,如果你使用的是:

$post_content = file_get_contents('php://input')

据我记得$post_content内的内容变成空白或类似的东西(它可能适用于单个文件,但不是多个文件,不能正确记住......)。

+0

AFIK这个问题是语言不可知的。它是关于现代的html。 – guettli

0

上传文件时,您始终需要在表单标签中使用enctype=" multipart/form-data"。但是当你没有上传任何文件时,这是没有必要的。
谢谢:)
快乐编码!

0

您可以使用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); 
} 
+0

谢谢你的回答。我的高层目标是少做,不多做。但你是对的,执行这个JavaScript代码片段围绕不确定性(如果有人仍然不确定) – guettli