文件系统和文件上传

未匹配的标注

文件系统和文件上传

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) }}"

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/fe...

译文地址:https://learnku.com/docs/masonite/4.0/fe...

上一篇 下一篇
贡献者:3
讨论数量: 0
发起讨论 只看当前版本


暂无话题~