将Webapp上的文件上传到Docker容器

我一直在谷歌搜索,似乎无法找到答案。我很抱歉,如果这是一个菜鸟问题,因为我还是Docker的新手。

场景:

我有一个带有NodeJS后端的dockerized网络应用。在网站上,我需要能够上传文件并将它们的路径存储在数据库(MSSql数据库容器)中。当我在节点端使用多方上载文件时,它为文件提供了临时路径。在Windows上,它是... / AppData / Local / Temp / ....在Linux上,它看起来是/ tmp / ...然后,我使用此路径作为链接来从其他页面打开文件。在Windows上,在本地运行该应用程序(不进行dockerizing),我可以访问该文件(不包括阻止下载的Chrome浏览器安全功能)。但是,在Linux和dockerized上,没有文件。我将在底部附加文件上传代码。

我知道docker容器不会像普通的Web应用程序那样与主机的文件系统通信。我的文件没有存储在/ tmp文件夹中,因为我已经在此处检查了。我的猜测是它以某种方式存储在容器中。

我的困惑在于如何存储这些文件。卷似乎是用于将文件加载到容器中的,而存储驱动程序似乎除了配置它们之外,您不会碰到其他东西(如果重要的话,我正在使用overlay2)。如何将上载的文件存储在容器中,以便我可以存储它们的路径并在以后再次访问它们?

var app = express();
app.post("/api/files",function(req,res) {
    var form = new multiparty.Form();
    form.parse(req,function(err,fields,files) {
        var dict = files.Contents[0];
        console.log(dict);
        var query = "EXECUTE CTF.dbo.CTF_CreateFilessp " + fields.ID + ",'" + dict["originalFilename"] + "','" + dict["path"] + "'";
        executeQuery(query,res);
    });
});

更新: 我可以使用以下容器为我的容器设置卷/绑定安装:

volumes:
       - /var/opt/tmp:/var/opt/tmp

,我将解析方法更新为:

app.post("/api/files",res) {
    var form = new multiparty.Form();
    var target_path = '';

    form.on('file',function(name,file) {
        var tmp_path = file.path;
        target_path = '/var/opt/tmp/' + file.originalFilename;
        fs.copyFile(tmp_path,target_path,function(err) {
            if (err) console.error(err.stack);
            else console.log(target_path);
        })
    });
    form.parse(req,files) {
        var dict = files.Contents[0];
        var query = "EXECUTE CTF.dbo.CTF_CreateFilessp " + fields.ID + ",'" + target_path + "'";
        executeQuery(query,res);
    });
});

当我上传文件时,确实在主机目录中看到了此副本的显示。但是,当我单击html页面上文件的链接时,使用完整路径/ var / opt / tmp / FILENAME时,它说无法GET / var / opt / tmp / FILENAME。 我确定这与不正确的权限或HTML中的href有关,但我不确定。我是Web开发的新手。

如何获取html页面上的链接以从目录下载此文件?请让我知道这是否超出了原始问题的范围,请再提出一个新问题。

askeric 回答:将Webapp上的文件上传到Docker容器

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3155839.html

大家都在问