文件系统和文件上传
文件系统和文件上传
Masonite 通过简单的方式上传文件到不同的文件系统.
在 Masonite中, 文件系统是存储资源的地方。这些位置可能是服务器本地上的某些位置或者是像Amazon S3(Amazon Simple Storage Service)这样的云存储服务。
配置
文件系统功能的配置是分成磁盘。这些磁盘或连接配置可以任意命名。
这里是一个配置举例:
DISKS = {
"default": "local",
"local": {
"driver": "file",
"path": os.path.join(os.getcwd(), "storage/framework/filesystem")
#
},
"s3": {
"driver": "s3",
"client": os.getenv("AWS_CLIENT"),
"secret": os.getenv("AWS_SECRET"),
"bucket": os.getenv("AWS_BUCKET"),
"path": "https://bucket.s3.us-east-2.amazonaws.com"
},
}
默认
当使用文件系统功能时,默认配置是你想要使用的磁盘名。
本地驱动
本地驱动是用于本地文件系统,例如服务器目录。所有的文件都在服务器本地进行存储与管理。
可选 | 描述 |
---|---|
driver |
磁盘驱动 |
path |
磁盘路径 |
S3 驱动
S3 驱动用于连接Amazon's S3云服务.
可选 | 描述 |
---|---|
driver |
磁盘驱动 |
client |
Amazon S3 客户端密钥 |
secret |
Amazon S3 密 钥 |
bucket |
Amazon S3 bucket 名称(存储盘名称) |
path |
显示资源的路径 |
上传文件
上传文件很简单。 你将必须使用 Masonite 的Storage
类.
第一个也是最简单的方法是获取文件并将文本传入。为此我们可以使用 put
方法。
from masonite.filesystem import Storage
from masonite.requests import Request
def store(self, storage: Storage, request: Request):
storage.disk('local').put('errors/info.log', 'errors')
方法 | 描述 |
---|---|
exists(file_path) |
检查文本是否存在,返回布尔值。 |
missing(file_path) |
检查文本是否丢失,返回布尔值。 |
stream |
创建一个文件流对象进行管理。 |
copy('/file1.jpg', '/file2,jpg') |
从一个目录复制一个文件到另一个目录。 |
move('/file1.jpg', '/file2,jpg') |
从一个目录移动一个文件到另一个目录。 |
prepend('file.log', 'content') |
将内容添加到文件开头。 |
append('file.log', 'content') |
将内容添加到文件末尾。 |
put('file.log', 'content') |
将内容写入到文件。 |
get('file.log') |
获取文件内容。 |
put_file('directory', resource, "name") |
将文件资源添加到目录中。 必须是 Masonite 的 UploadedFile 实例. 采用可选的第三个参数 name 来指定文件名。 |
上传表单文件
从表单上传文件时,你会发现 put_file
方法更有用:
from masonite.filesystem import Storage
from masonite.requests import Request
def store(self, storage: Storage, request: Request):
path = storage.disk('local').put_file('avatars', request.input('avatar'))
put_file
方法将返回文件的相对路径,以便你将其保存到数据库并稍后获取。
默认情况下,将使用 UUID4 字符串为你自动生成文件名。你可以使用 name
参数指定自己的名称:
storage.disk('local').put_file('avatars', request.input('avatar'), name="user1")
你不需要在名称中指定扩展名,因为扩展名将从资源对象中提取。
资源助手函数
显示文件
将图像上传到 AWS 存储桶之类的东西时,你可能希望显示图像。你可以结合使用资源助手函数和在文件系统配置中设置路径。这主要只是为组合 2 个字符串提供了一个很好的接口
使用 Amazon S3 时,你需要适当地设置你的存储桶权限和策略。
首先,在文件系统配置中设置路径:
DISKS = {
"default": "local",
# "..",
"s3": {
"driver": "s3",
# "..",
"path": "https://bucket.s3.us-east-2.amazonaws.com"
},
}
然后在你的模板中,您可以使用资源助手函数:
<img src="{{ asset('s3', user.avatar_url) }}">
签名是:
asset('disk', file_name)
多条路径
你还可以将多个路径指定为字典:
DISKS = {
"default": "local",
# "..",
"s3": {
"driver": "s3",
# "..",
"path": {
"logos": "https://bucket.s3.us-east-2.amazonaws.com/logos",
"invoices": "https://bucket.s3.us-east-2.amazonaws.com/invoices"
}
},
}
然后在你的资源助手函数中,你可以使用点表示法来指定你要使用的路径:
<img src="{{ asset('s3.logos', user.avatar_url) }}">
<a href="{{ asset('s3.invoices', invoice_url) }}"
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。