【发布时间】:2020-11-18 10:39:48
【问题描述】:
我想从本地磁盘中选择一个图像文件,然后单击按钮将其上传到服务器。一旦上传到服务器,服务器应该以图像作为响应返回给浏览器。这是我为实现这一目标而编写的一段代码:
let querystring = require('querystring');
import fs from 'fs';
import formidable from 'formidable';
function start(res){
console.log("Request handler 'start' was called");
let body =`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Upload</title>
</head>
<body>
<form action="/upload" enctype="multipart/form-data" method="post">
<input type="file" name="upload" multiple="multiple">
<button type="submit" value="Upload file">submit</button>
</form>
</body>
</html>`;
res.writeHead(200, {"content-type": "text/html"});
res.write(body);
res.end();
}
function upload(res, req){
console.log("Request handler 'upload' was called");
let form = new formidable.IncomingForm();
console.log("about to parse");
form.parse(req, (err,fields,file)=>{
console.log("parsing done!");
fs.rename(file.upload.path,"/tmp/test.png", (err)=>{
if(err){
fs.unlink("/tmp/test.png");
fs.rename(file.upload.path, "/tmp/test.png");
} });
res.writeHead(200, {"Content-Type": "text/html"});
res.write("received image:<br/>");
res.write("<img src='/show' />");
res.end();
});}
function show(res) {
console.log("Request handler 'show' was called.");
response.writeHead(200, {"Content-Type": "image/png"});
fs.createReadStream("/tmp/test.png").pipe(res);}
export {start,upload,show};
运行代码时出现以下错误;
PS C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive node> node -r esm index.js
Response ready
Request for / recieved
About to route a request for /
Request handler 'start' was called
Request for /upload recieved
About to route a request for /upload
Request handler 'upload' was called
about to parse
parsing done!
TypeError [ERR_INVALID_CALLBACK]: Callback must be a function. Received undefined
at makeCallback (fs.js:161:11)
at Proxy.unlink (fs.js:1151:14)
at C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive node\requestHandlers.js:40:16
at FSReqCallback.oncomplete (fs.js:164:23) {
code: 'ERR_INVALID_CALLBACK'
}
PS C:\Users\paullaster-geek\OneDrive\Desktop\Projects\Dive node>
【问题讨论】:
标签: javascript node-modules fs formidable