deno
deno copied to clipboard
FormData uses chunked encoding rather than `Content-Length`, even for known-sized form uploads
Version: Deno 1.39.0
for formData request build can't got content-length header
const hander=async (req)=>{
let data
if (req.method === 'POST') {
const formData = await req.formData()
const file = formData.get('file')
const FromEmail = formData.get('FromEmail')
const ToEmail1 = formData.get('ToEmail1')
const MessageText = formData.get('MessageText')
let formDataNew = new FormData();
formDataNew.append("FromEmail", FromEmail);
formDataNew.append("ToEmail1",ToEmail1);
formDataNew.append("MessageText",MessageText);
formDataNew.append("upfile", file, file.name);
const request = new Request("https://post.deno.dev", {
method: "POST",
body: formDataNew });
console.log(request.headers);
//todo
// fetch(request)
data = { fileName:file.name ,MessageText,FromEmail,ToEmail1,headers:{
'content-type':request.headers.get('content-type'),
'content-length':request.headers.get('content-length'),
}}
console.info(data)
}
const res = new Response(
`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>repro</title>
</head>
<body>
<form method="post" action="" enctype="multipart/form-data">
<p><input type="file" required name="file"></p>
<p><input type="text" name="FromEmail" placeholder="FromEmail" ></p>
<p><input type="text" name="ToEmail1" placeholder="ToEmail1" ></p>
<p><input type="text" name="MessageText" placeholder="MessageText" ></p>
<p><input type="submit"></p>
</form>
${data
? `<pre>${
JSON.stringify(data, null, 4).replaceAll(/[&<>'"]/g, (m) => `&#${m.codePointAt(0)!};`)
}</pre>`
: ''
}
</body>
<script>
const file = new File(['file'], '选择文件')
const dt = new DataTransfer()
dt.items.add(file)
document.querySelector('[name=file]').files = dt.files
</script>
</html>`,
{ headers: { 'Content-Type': 'text/html' } }
)
return res
}
Deno.serve(hander);
We currently don't provide a Content-Length for FormData because the object is streamed as a Blob.
@crowlKats Is this something we can do without making the FormData serialization too slow?