大多数情况下,文件上传错误的来源是我们忘记在HTML表单中添加enctype
属性。
通常,我们不需要为常规请求添加enctype
属性。但是,我们需要在上传文件时将其添加到HTML表单中,
enctype="multipart/form-data"
我只是好奇,为什么没有enctype
属性上传文件不起作用?
答案 0 :(得分:29)
“multipart / form-data”enctype由RFC 1867指定,您可以查看here以获取更多技术概述。
在HTML表单中,数据表示为多个字段。当使用multipart / form-data作为enc类型时,浏览器将表单字段作为一系列“部分”发送,每个部分都有一个内容类型标题来描述存储在该部分中的数据类型。对于普通表单字段,此内容类型通常设置为“text / plain”。此内容类型仅在使用multipart / form-data enctype时由浏览器发送。
对于“文件”类型的输入元素,内容类型是“application / octet-stream”或类似的东西,它向服务器端软件指示该字段的内容不是典型的明文,而是a的内容。文件,应该以不同的方式处理。
如果不使用“multipart / form-data”,“file”类型的输入元素不起作用的原因是由于服务器无法识别该字段的内容与a的任何不同普通文本字段(因为浏览器不发送内容类型,除非使用multipart / form-data),因此它将字段的内容作为普通文本处理。当使用正确的enctype并且服务器可以正确识别该字段包含的数据类型时,服务器知道将该字段的内容作为文件数据而不是文本处理,并且可以正确处理它。
答案 1 :(得分:4)
您可能需要查看此处的评论: http://www.velocityreviews.com/forums/t137597-html-file-upload-using-enctype-multipart-form-data-in-form.html
简短回答是enctype告诉浏览器如何发送文件。如果没有正确的编码类型,它将无法发送文件。