Manual:Configuring file uploads/zh

MediaWiki支持上传和整合媒体文件. 本页从技术方面描述此特性，关于一般使用方面请看和页面.

出于安全考虑，从MediaWiki的1.1版起，上传功能默认被禁用. 通过配置可以启用上传功能，但建议你先检查确认一下先决条件.

先决条件


确保上传功能在PHP中启用
中需有如下设置：

如无此设置，PHP脚本中不能使用上传功能，并且MediaWiki的上传也不能启用.

如果設定了"open_basedir"项，那么此项须包含你的MediaWiki安裝中的上传文件夹（"{$IP}/images"）和'upload_tmp_dir'文件夹（如果未设定則使用系统默认文件夹）. 添加'upload_tmp_dir'可以避免像找不到文件/var/tmp/php31aWnF这样的消息（在这个例子中'upload_tmp_dir'是'/var/tmp'）. 阅读File 文件上传基础知识，特别是以了解有关PHP文件上传的更多信息.



Windows 与 IIS 用户检查
设置 拥有Internet来宾帐户的权限（ _MachineName或对于IIS 7+： ）：读、写、执行



检查目录安全性
需要配置上传目录，以便最终用户无法上传和执行其他脚本，这些脚本可能会利用对您的Web目录的访问权并损坏您的Wiki或Web站点.

设置 文件夹（或以前版本中的 文件夹）以获得权限“755”：


 * 用户可以读、写和执行.
 * 组可以读和执行.
 * 任何人都可读和执行.

如果使用，请确保相应地调整ACL（请参阅此处）.



检查服务器安全状况
See Manual:Security for changes to make to your webserver configuration to prevent uploaded files from executing code or having browsers execute malicious files.


 * 限制images文件夹上的目录列表

如果您不希望公共用户列出您的images文件夹，可以选择在apache配置中进行设置：



检查 .htaccess 文件
MediaWiki安装文件夹中的 目录包含一个.htaccess文件，其中包含一些配置. 此文件的目标是使上载文件夹更安全，如果将上载目录放在其他位置，建议还将.htaccess文件复制到新位置，或直接在服务器上应用该配置. 但是，其中一些配置可能会导致冲突或错误，具体取决于服务器的配置方式.

需要考虑的一些事情：


 * 如果服务器不允许在.htaccess文件中设置或覆盖指令，则访问该文件夹下的任何文件可能会导致通用的“HTTP 500错误”. 如果是这种情况，您应该注释掉行，并将这些指令直接应用于服务器配置文件.  最有可能导致问题的指令是 ，它阻止HTML和PHP文件作为HTML和 ，这将阻止PHP文件在服务器上被解析和执行.



设置上传开启/关闭
在MediaWiki 1.5及更高版本中，要设置的属性位于中，设置如下：

要禁用上传功能，请将该属性设置为false(！注意LocalSettings.php中存在这一行)：



使用一个中心存储库
InstantCommons是一项功能，通过配置更改启用，可让您立即访问维基共享资源中的数百万免费（免费许可）文件.



上传权限
默认来说，所有已注册用户都可以上传文件. 要限制它，你必须改变：


 * 防止普通用户上传文件：


 * 要创建一个名为“uploadaccess”的特殊组，并允许该组的成员上传文件：


 * 允许自动确认用户上传文件：

替换现有文件的权利由额外的权限处理，称为 :


 * 防止普通用户覆盖现有文件：


 * 允许自动确认用户覆盖已存在的文件：

如果设置了ForeignFileRepo，则在本地替换这些文件的权限由特殊权限处理，称为 ：


 * 防止普通用户在本地覆盖filerepo文件：


 * 允许自动确认用户在本地替换filerepo文件：

有关用户权限的详细信息，请参阅手册:用户权限，有关限制访问权限的详细信息，请参见手册:阻止访问.



设置文件种类
您可以在中添加以允许上传其他所需的文件类型. 例如，您可以将$wgFileExtensions行更改为类似的内容

或

或

但是，某些文件扩展名被列入黑名单（），即使添加到$wgFileExtensions也无法上传. 要上传带有黑名单扩展名的文件，您必须修改黑名单. 例如，允许用户上传可执行文件：

另外，根据MIME类型防止某些文件类型，例如，基于MIME类型（MediaWiki版本1.14至1.17）禁止.zip文件.

你也可以设置

允许上传大多数类型的文件. 但是，仍然不允许列入黑名单的文件类型和MIME类型.

如果您收到错误“文件已损坏或扩展名不正确”，请确保MIME类型检测正常工作.

如果您决定允许任何类型的文件，请确保您的mime检测正在运行，并考虑启用.

要启用zip扩展名（在MediaWiki v1.19.23中测试），LocalSettings.php文件中需要以下内容：



登录
默认情况下，不允许匿名上传. 您必须先注册并登录，然后才能在工具箱中显示“上传文件”链接.

图片缩略图
有关图像自动显示/以缩略图显示的信息,请参见. 有关缩略图的问题，请参阅图像缩略图无法正常工作和/或出现.

如果文件不是可视的（如图像或视频），则使用文件图标. 这些是由FileRepo组的File类中的 函数生成的. 存储在" "中的图标，格式为" ".



为文件上传设定最大限制
浏览器在实际发送文件之前会告知服务器需要上传的文件的大小.

如果上传的文件太大，它将被目标（服务器）拒绝，上传将会失败. 根据不同的限制会抛出不同的错误：


 * 如果超过了服务器传输数据的最大值的限制（nginx，Apache），可能会仅仅抛出HTTP 500错误或HTTP 413 Payload Too Large（请求的实体太大）.
 * 如果这一限制是在PHP层面：如果超出了 ，可能会返回HTTP 500错误（或是一个空白页面）. 否则，MediaWiki会给出一个有意义的错误信息.



默认情况下，中的配置代码将要上载的文件大小限制为2M（并将POST操作的最大大小限制为8M）. 要允许上传更大的文件，请在php.ini中编辑这些参数：


 * ，默认为8M
 * ，默认为2M

这可能需要服务器的root用户权限. （如果您在共享主机上，请与服务器管理员联系. ）

php.ini文件的位置因您使用的发行版而异. 在 查看找到你的服务器的 php.ini 的方法.
 * 找到php.ini文件:

如果您在服务器上托管了多个网站，并且只想更改Mediawiki，请在中插入/etc/apache2/sites-enabled/your_wiki_site.com：
 * 同一服务器上架设的多个网站:

如果您的网站使用mod_php，则上述设置也适用于.htaccess文件. 如果您的站点使用PHP>=5.3并允许它，您可以在.user.ini文件中放置php.ini指令代替.


 * web服务器限制:

您的Web服务器可能会对允许上载的文件大小施加进一步的限制. 对于Apache，其中一个相关设置是“LimitRequestBody”. 对于nginx，client_max_body_size是相关的设置. 对于Lighttpd，server.max-request-size需要修改.

Ubuntu 16.04:

（例如，sudo /etc/init.d/php5-fpm在Linux中重启. ）


 * 上传太大的文件警告:

如果您尝试上传大于选项指定的文件，MediaWiki本身会发出警告. 这与PHP强加的硬限制无关.


 * 临时上传限制:

上传限制的临时更改（例如，在服务器场上使用多个wiki时）可以通过添加以下行来更改：

到每个wiki的MediaWiki LocalSettings.php配置文件. 在这个例子中，PHP限制被设定为50MB. 请注意，这些设置不会覆盖上面设置的最大设置（因为核心php.ini和apache2 php.ini文件设置了绝对最大值）. 此方法设置小于绝对最大值的最大值.


 * IIS7 上传限制

  

使用上面的maxAllowedContentLength，用户可以上传大小为50000000字节（50MB）的文件. 此设置将立即生效，无需重新启动IIS服务. web.config文件位于网站的根目录中.

允许最大到 2G 的文件上传:

将以下文本加入至LocalSettings.php：

并且， 修改 这些行在PHP.INI中:

在IIS web.config文件中，覆盖maxRequestLength的值. 例如，web.config中的以下条目允许上载小于或等于2GB的文件：

使用IIS 7，您还需要将其配置为允许大型上载. 通过单击窗口中间的IIS部分中的“请求筛选>编辑功能设置”可以找到此问题. 将“允许的最大内容长度（字节）”字段设置为2147482624. 如果在IIS部分中未看到请求筛选，则需要通过控制面板中的打开或关闭Windows功能区域中的Internet信息服务→万维网服务→安全性启用它.

如果上述提示未启用大型上载，则打开命令提示符并执行此命令：



允许 Java JAR 上传
默认情况下，MediaWiki将扫描所有看似ZIP存档的上传，并拒绝任何包含Java.class文件的上传. 这是一种防止用户上传恶意Java小程序的安全措施. 仅限非公共网站，请使用以下内容禁用此检查：

此设置可用作允许不加区别地接受mimetypes的解决方法. 例如，如果您尝试上载Word 2007创建的.doc文件，无论您提供的文字列表和您调用或禁止的mimetype检查，您都会收到以下消息：


 * 该文件是损坏的或其他不可读的ZIP文件，无法正确检查安全性. 

由Word 2007（以及可能的更高版本）保存的.doc文件包含一个小的嵌入式ZIP存档，存储的元数据不能以早期版本的Word使用的二进制.doc格式表示. 此嵌入的ZIP数据会混淆Java归档扫描程序，导致.doc文件被拒绝. 较新的.docx文件格式的文件是完整的有效ZIP存档，可以成功上载而无需设置.

<span id="Uploading_directly_from_a_URL_(&quot;Sideloading&quot;)">

直接从 URL 上传 ("Sideloading")
如果要允许用户直接从URL上载文件，而不是从本地计算机上的文件上载，请设置.

默认情况下，只能使用API（或等扩展）按URL上传. 要使选项在Special:Upload中可用，您需要将设置为. 在上传表单中，您将看到URL的附加字段，位于通常的文件名字段下方. 默认情况下，URL字段显示为灰色，但可以通过激活字段左侧的单选按钮（复选框）来激活.

要使用此功能，用户必须拥有user right. 默认情况下，此权限被授予管理员，直到MediaWiki 1.20，但现在需要明确授予它. 要对于普通用户允许这个，设置 请注意，允许直接从网络上的任意位置上传，可以更轻松地上传随机的，不需要的内容，并且可能会被误解为上传人们可能在网络上遇到的任何内容的邀请.

<span id="Mass_uploading">

大规模上传
有许多工具可以一次上传多个文件，而不是分别上传每个文件：

<span id="Upload_directory">

上传目录
每当上传图像时，都会创建几件事：


 * 1) 文件命名空间中的文章，其中包含文件名，例如文件:MyPicture.png. 此页面已存储，可以像任何其他页面一样进行编辑.
 * 2) 文件本身存储在文件系统的文件夹中，该文件系统在中配置，或者在其子文件夹中配置为一个（见下文）.
 * 3) 如果可以使用缩略图，将创建该文件的缩略图版本（例如，在文件描述页面上使用）. 它们存储在图像目录的缩略图目录中，位于每个主文件的单独目录中.

如果启用（默认情况下），MediaWiki会在images目录中创建多个子目录.

如果 设置为 ，则上传的文件将根据文件名的md5哈希的前两个字符分发到$wgUploadDirectory的子目录中（例如$IP/images/a/ab/foo.jpg）. 创建这样的子目录是自动处理的. 这用于避免在一个文件夹中包含太多文件，因为某些文件系统在一个文件夹中对大量文件执行效果不佳.

如果您只维护一个包含很少上传图像的小维基，可以通过设置 来关闭它，所有图像都会上传到$wgUploadDirectory本身（例如$IP/images/foo.jpg）.

<span id="Multiwiki_sites">

多维基站点

 * 确保您已更改LocalSettings.php中的网站位置，例如/var/lib/mediawiki到你的安装所在的位置，并创建一个可写图像目录（其余大部分都可以进行符号链接）.

不这样做会神秘地破坏图片上传.

<span id="Configuring_the_upload_form">

配置上传表单
随默认的MediWiki安装提供的上传表单消息（当您单击“上载文件”链接或转到Special:Upload链接时出现）可能不太适合您.

在这种情况下，您可以编辑MediaWiki:Uploadtext内容并提供自己的文本. 如果您的维基站点是多语言，请不要忘记编辑MediaWiki:Uploadtext/de等本地化版本.

在MediaWiki:Licenses页面上，您可以自定义上传站点许可证的下拉列表. 参见这一功能的帮助文档.

考虑到默认情况下MediaWiki:Licenses/de等本地化版本不起作用. 要启用它们，您必须配置变量.

编辑MediaWiki:Upload-default-description以将初始文本添加到上载表单的摘要字段中（例如，您的Wiki站点具有用于上载摘要的通用模板，并且您希望每个人都使用该模板）.

<span id="Known_problems_on_Windows">

Windows 上的已知问题
由于PHP错误，在Windows服务器上运行MediaWiki在允许的文件名中有一些限制. PHP无法正确处理包含非ascii字符的文件名，MediaWiki将拒绝上传包含此类字符的文件，以防止上传内容（），消息为.

因为MediaWiki 1.31及更高版本可以处理带有非ascii字符的文件名，如果它使用的是PHP 7.1或更高版本.

<span id="Known_problems_with_database_names_having_non-alphanumeric_characters">

具有非字母数字字符的数据库名称的已知问题
如果 包含非字母数字字符，则上传可能会失败，并出现错误，例如 无法创建目录"mwstore://local-backend/local-public/&lt;path&gt;". . 这是由内部检查文件后端的有效容器名称引起的，但它是使用构造的.

从MediaWiki 1.26开始，当包含点时，它允许上传.

<span id="See_also">

参见

 * 安全部分上传安全性
 * 手册:配置设置#上傳获取与文件上载相关的所有配置变量的列表
 * - 类似的列表（按英文字母排列）
 * 您在尝试上传文件时看到一个空白页面
 * 添加新的支援檔案類型