无法获得表示形式的mutler的html格式的文件的完整路径名

问题描述 投票:0回答:1

我在从html表单获取文件的完整路径时遇到了一些困难。我了解浏览器不允许这样做。我在stackoverflow中进行了一些搜索,无法解决问题。我可能错过了一些简单或直接的内容。

该任务是从用户选择的位置打开文件(例如“ readme.txt”)。如果文件与脚本位于同一文件夹位置,则它将起作用。如果文件位于其他文件夹中,它将失败。错误堆栈如下。

[基本上,我正在使用html表单,并且服务器是Express和Mutler。使用postman,我可以通过在postman中指定完整路径来打开文件,所以我认为问题出在形式上,因为我无法获取文件的完整路径。

我的问题(在对谷歌搜索/ stackoverflow进行了一些不确定的搜索之后:如何通过html表单获取文件的完整路径名?如果不能(由于浏览器安全性原因),我想打开文件时有哪些解决方法。

感谢您将我指向正确的方向(或进行搜索!)>

    <form method="POST" action="http://localhost:3000/upload" >
        <div>
            <label>Select your profile picture:</label>
            <input type="file" name="file" />
        </div>
        <div>
            <input type="submit" name="btn_upload_profile_pic" value="Upload" />
        </div>
    </form>

服务器


var express = require('express')
var bodyParser = require ('body-parser')
var fs = require ('fs')
var multer = require('multer')

const port = process.env.PORT || 3000
const app = express ();


app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());



const storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, 'uploads/');
    },

    // By default, multer removes file extensions so let's add them back
    filename: function(req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
    }
})

var upload = multer({ storage: storage })


app.post ("/upload",  (req, res)=>{


    console.log (JSON.stringify (req.body.file))


    const content = fs.readFileSync(req.body.file, 'utf8');
    console.log(content);

    res.send (content)


})


app.listen (port, ()=>{

    console.log ('Server is up on port ' + port)
})

错误堆栈,如果我从另一个位置打开文件(从html表单)

Error: ENOENT: no such file or directory, open 'readmefolder.txt'
    at Object.openSync (fs.js:451:3)
    at Object.readFileSync (fs.js:353:35)
    at /Users/dev/Development/node/mutlertest/playground/servertest.js:44:24
    at Layer.handle [as handle_request] (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/layer.js:95:5)
    at /Users/dev/Development/node/mutlertest/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/dev/Development/node/mutlertest/node_modules/express/lib/router/index.js:275:10)

    

我在从html表单获取文件的完整路径时遇到了一些困难。我了解浏览器不允许这样做。我在stackoverflow中进行了一些搜索,无法解决问题。我...

html node.js express multer
1个回答
0
投票

app.post ("/upload")路线中使用multer中间件,在这里您可以找到详细的说明:https://github.com/expressjs/multer

热门问题
推荐问题
最新问题