Dropzone:无法将大图像上传到服务器(> 5M)
Dropzone : Cannot upload big images to server (>5M)
我在 /etc/php/7.2/apache2/php.ini
中有以下设置:
max_execution_time = 300
max_file_uploads = 20
memory_limit = 32M
post_max_size = 18M
upload_max_filesize = 20M
但是,如果我上传的文件大小超过 5M,我会收到消息:
The given data was invalid.
而且当我把 Dropzone 的完整错误响应放入时,我还可以看到这个消息:
The file may not be greater than 5000 kilobytes.
当我更改Dropzone选项maxFilesize
时,它适用于小于5M的数字,但当大于5M时,上传仍然限制为5M。
此外,我的 .htaccess 文件中没有上传大小限制。
这个问题还可能来自哪里?
=== 编辑 #1 ===
服务器上df
的结果如下:
Filesystem 1K-blocks Used Available Use% Mounted on
udev 989880 0 989880 0% /dev
tmpfs 200340 2884 197456 2% /run
/dev/sda1 10291200 3673732 6167924 38% /
tmpfs 1001696 0 1001696 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1001696 0 1001696 0% /sys/fs/cgroup
=== 编辑 #2 ===
我在我的 Laravel 项目中制作了一个基本的上传页面,我能够上传更大的文件 (>5M),所以我的问题一定来自 Dropzone。
在 dropzone 选项中设置 maxFilesize:
<script>
Dropzone.options.myDropzone = {
maxFilesize: 500,
}
</script>
在 Apache 中设置限制最大请求体大小 VirtualHost 部分:
#Set Max to 20MB
<Location />
LimitRequestBody 20971520
</Location>
这可能发生在使用 Linux tmp
文件夹存储图像以对其进行任何转换(例如调整大小)的库中。因此,值得尝试更改 PHP 用于存储 tmp 文件的文件夹。
为此,您必须创建一个文件夹,例如 /tmp-alt
。确保此文件夹具有在其中存储文件的适当权限。然后,转到 PHP.ini,在你的情况下 /etc/php/7.2/apache2/php.ini
,然后 change/create 以下 属性:
upload_tmp_dir = /tmp-alt
更改文件后,重新启动Apache并检查上传文件是否正常。
我的问题出在控制器上,我还可以选择设置最大尺寸。
public function store(Request $request)
{
$request->validate([
'file' => 'required|file|max:10000|mimes:' . $this->getAllowedFileTypes(),
'attachable_id' => 'required|integer',
'attachable_type' => 'required'
]);
...
}
首先:upload_max_filesize
设置说明单个上传文件的最大文件大小。然而 post_max_size
告诉所有文件允许的最大大小是多少(准确地说是所有 post 字段)。
如要允许上传10个10M的文件,则post_max_size
至少应为10*10 = 100M。
还要确保您使用的是正确的 ini 文件。 运行 phpinfo()
在您的网络浏览器中检查加载的 ini
文件的位置。您可能正在编辑您的 CLI ini 文件,它可以是一组不同的文件。
通过 运行 phpinfo()
您可以验证您的设置是否被使用。
我在 /etc/php/7.2/apache2/php.ini
中有以下设置:
max_execution_time = 300
max_file_uploads = 20
memory_limit = 32M
post_max_size = 18M
upload_max_filesize = 20M
但是,如果我上传的文件大小超过 5M,我会收到消息:
The given data was invalid.
而且当我把 Dropzone 的完整错误响应放入时,我还可以看到这个消息:
The file may not be greater than 5000 kilobytes.
当我更改Dropzone选项maxFilesize
时,它适用于小于5M的数字,但当大于5M时,上传仍然限制为5M。
此外,我的 .htaccess 文件中没有上传大小限制。
这个问题还可能来自哪里?
=== 编辑 #1 ===
服务器上df
的结果如下:
Filesystem 1K-blocks Used Available Use% Mounted on
udev 989880 0 989880 0% /dev
tmpfs 200340 2884 197456 2% /run
/dev/sda1 10291200 3673732 6167924 38% /
tmpfs 1001696 0 1001696 0% /dev/shm
tmpfs 5120 0 5120 0% /run/lock
tmpfs 1001696 0 1001696 0% /sys/fs/cgroup
=== 编辑 #2 ===
我在我的 Laravel 项目中制作了一个基本的上传页面,我能够上传更大的文件 (>5M),所以我的问题一定来自 Dropzone。
在 dropzone 选项中设置 maxFilesize:
<script>
Dropzone.options.myDropzone = {
maxFilesize: 500,
}
</script>
在 Apache 中设置限制最大请求体大小 VirtualHost 部分:
#Set Max to 20MB
<Location />
LimitRequestBody 20971520
</Location>
这可能发生在使用 Linux tmp
文件夹存储图像以对其进行任何转换(例如调整大小)的库中。因此,值得尝试更改 PHP 用于存储 tmp 文件的文件夹。
为此,您必须创建一个文件夹,例如 /tmp-alt
。确保此文件夹具有在其中存储文件的适当权限。然后,转到 PHP.ini,在你的情况下 /etc/php/7.2/apache2/php.ini
,然后 change/create 以下 属性:
upload_tmp_dir = /tmp-alt
更改文件后,重新启动Apache并检查上传文件是否正常。
我的问题出在控制器上,我还可以选择设置最大尺寸。
public function store(Request $request)
{
$request->validate([
'file' => 'required|file|max:10000|mimes:' . $this->getAllowedFileTypes(),
'attachable_id' => 'required|integer',
'attachable_type' => 'required'
]);
...
}
首先:upload_max_filesize
设置说明单个上传文件的最大文件大小。然而 post_max_size
告诉所有文件允许的最大大小是多少(准确地说是所有 post 字段)。
如要允许上传10个10M的文件,则post_max_size
至少应为10*10 = 100M。
还要确保您使用的是正确的 ini 文件。 运行 phpinfo()
在您的网络浏览器中检查加载的 ini
文件的位置。您可能正在编辑您的 CLI ini 文件,它可以是一组不同的文件。
通过 运行 phpinfo()
您可以验证您的设置是否被使用。