我在公共文件夹中创建了uplods文件夹。
此文件夹包含我系统的所有已上传图像。
我会尽快上传文件,自动刷新浏览器。
我保持上传〜和〜上传但是一旦文件上传,那么它就会重新加载。
我想通过localhost:3000访问它,所以this解决方案对我不起作用
答案 0 :(得分:0)
Meteor将一直关注开发模式下的文件更改。您可以在生产模式下运行,但每次更改代码时都需要刷新...
您不希望将上传的内容公开存储。
以下是关于Meteor论坛关于此主题的答案: https://forums.meteor.com/t/why-shouldnt-i-upload-files-in-the-public-directory/36899/3
使用除了流星应用之外的其他内容 管理/存储/提供用户文件有很多好处。
如果您的应用程序崩溃,文件服务器仍然可用(当前上传 将继续)。如果您的文件服务器崩溃,应用程序仍然可以 运行并使用。流星不擅长提供文件,所以服务 用户的文件将影响您的应用程序性能和文件 服务本身。将文件存储在Meteor的公共文件夹中 可供全世界使用,您可能不希望这样。文件处理 和服务器应用程序不需要相同的服务器规范, 所以你以后想要把它们分开。编辑:
我意识到这一点,同时对你的其他选择给出了更好的见解 根本没有回答你的问题。
为什么不能公开存储用户的文件?正如有人指出的那样, 公开的任何文件都可供全世界使用。公用文件夹 与您的应用捆绑在一起,它被认为是您的来源的一部分。 它旨在存储您的应用程序使用的资源,例如您的 徽标,自定义图标和字体等...就像您的数据库一样 用户的文件是动态数据,应与您的代码分开, 您的应用程序不需要它们来运行。他们习惯了 存储您的应用程序收集的信息,并且非常适合 对,但他们的内容通常不会跟随您的申请 不同的环境,如开发,分期和生产。 当您在进行一些更改后重新绑定应用程序时,您将拥有一个新的应用程序 公用文件夹内容您的图像和字体文件,但不是全部 您工作时用户上传的文件,您将拥有这些文件 确保您没有删除这些文件。即使你的 每个人都可以看到上传的文件,您肯定会使用 数据库,以跟踪上传的文件,他们的上传日期, 所有者,大小,标签等......这意味着即使你保留这些文件 在dev / staging / production中你还需要完整的 database ...在推送到生产时合并数据库更改 将比登记文件夹更难......
一个简单的解决方案就是像你一样使用Meteor,但将文件存储在源代码之外的某个地方。并使用NGINX来提供这些文件。这是我正在使用的NGINX配置......它代表对Meteor的正确请求以及所有以" image"开头的请求。在网址中直接从/img/
server_tokens off; # for security-by-obscurity: stop displaying nginx version
# this section is needed to proxy web-socket connections
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
# HTTP
server {
listen 80 default_server; # if this is not a default server, remove "default_server"
#listen [::]:80 default_server ipv6only=on;
root /usr/share/nginx/html; # root is irrelevant
index index.html index.htm; # this is also irrelevant
server_name meteor.localhost; # the domain on which we want to host the application. Since we set "default_server" previously, nginx will answer all hosts anyway.
access_log /etc/nginx/logs/app.access;
error_log /etc/nginx/logs/app.error error;
location / {
proxy_pass http://localhost:3000;
proxy_set_header X-Real-IP $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr; # preserve client IP
if ($uri != '/') {
expires 30d;
}
}
location /image/{
alias /img/;
expires -1;
}
}
请注意,这意味着您将通过端口80而不是3000访问您的应用程序,因为NGINX将负责代理。
答案 1 :(得分:0)
这对我有用
我已将下面的代码放在客户端启动
中Meteor._reload.onMigrate(function() {
return [false];
});
感谢它按要求正常工作