discuz阿里云oss上传
时间 : 2023-12-06 18:06:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

最佳答案

DISCUZ是一款广泛使用的论坛程序,而阿里云OSS(Object Storage Service)是一种强大的对象存储服务。结合起来使用,可以实现在DISCUZ论坛中上传文件到阿里云OSS的功能。在本文中,我们将介绍如何在DISCUZ中集成阿里云OSS上传功能。

首先,我们需要在阿里云控制台中创建一个OSS存储桶。在存储桶属性设置中,我们需要开启“跨域资源共享(CORS)”选项,并添加以下配置:

```xml

<CORSConfiguration>

<CORSRule>

<AllowedOrigin>*</AllowedOrigin>

<AllowedMethod>GET</AllowedMethod>

<AllowedMethod>POST</AllowedMethod>

<AllowedMethod>PUT</AllowedMethod>

<MaxAgeSeconds>3000</MaxAgeSeconds>

<AllowedHeader>*</AllowedHeader>

</CORSRule>

</CORSConfiguration>

然后,我们需要在DISCUZ后台进行配置。进入后台管理界面,找到插件管理,搜索“阿里云OSS上传”,并安装启用该插件。然后,在插件设置中填写阿里云的AccessKeyId、AccessKeySecret、Endpoint、Bucket等相关信息,并保存配置。

接下来,我们需要修改DISCUZ的文件上传处理代码,使其上传文件到阿里云OSS。这部分代码位于`/source/module/forum/forum_upload.php`文件中。

我们需要修改以下代码块:

```php

if($allowupload) {

$this->param['mod'] == 'swfupload' && $_GET['type'] == 'attach' && !$_FILES && $_GET['src'] && preg_match('/^https?:\/\/([^\:]+)(\:\d{2,5})?\//i', $_GET['src'], $matches) && $_G['setting']['attachrefcheck'] && die('0');

require_once libfile('class/upload');

require_once libfile('class/cloud');

$upload = new discuz_upload();

// 修改代码开始

if($_GET['simple'] == 1) {

require_once libfile('class/cloudupload');

$upload = new discuz_cloudupload();

$upload->init($_FILES, 'forum');

$attach = $upload->attach;

$upload->save('tmp');

$attach['name'] = $_POST['attachnew'][$attach['description']];

} else {

$upload->init($_FILES, 'forum');

$attach = $upload->attach;

$upload->save('tmp');

}

// 修改代码结束

if(!$upload->error()) {

$forumattachextensions = !empty($_G['forum']['attachextensions']) ? $_G['forum']['attachextensions'] : $_G['group']['attachextensions'];

if($forumattachextensions != '' && $upload->attach['ext'] && stristr($forumattachextensions, $upload->attach['ext']) === FALSE) {

unlink($upload->attach['target']);

$result = array('url' => '', 'error' => 1);

if($forumattachextensions != '' && $upload->attach['ext'] && stristr($forumattachextensions, $upload->attach['ext']) === FALSE) {

$result['message'] = lang('forum/misc', 'attachtypeban');

} else {

$result['message'] = lang('forum/misc', 'attachforumtypeban');

}

echo json_encode($result);

exit;

}

if($_GET['type'] == 'image' && $_G['setting']['imagewatermark']) {

if($_G['forum']['status'] == 3 && $_G['group']['allowmediacode']) {

$upload->attach['isimage'] = false;

}

require_once libfile('class/image');

if(file_exists($_G['setting']['attachdir'].'watermark.png')) {

$waterimage = $_G['setting']['attachdir'].'watermark.png';

$attachment = $_G['setting']['attachurl'].'watermark.png';

} elseif(file_exists('source/plugin/yingxiao/stuff/images/watermark.png')) {

$waterimage = 'source/plugin/yingxiao/stuff/images/watermark.png';

$attachment = 'source/plugin/yingxiao/stuff/images/watermark.png';

} else {

$waterimage = '';

}

if($_G['setting']['watermarktype'] == 'forum') {

$watermarkstatus = $_G['setting']['watermarkstatus'];

} else {

$watermarkstatus = $_G['group']['allowwatermark'] && $_G['setting']['watermarkstatus'];

}

if($_G['group']['allowwatermark'] && $_G['setting']['watermarkstatus'] && $waterimage) {

$img = new image;

$img->Constrain = 0;

$img->WatermarkType = $_G['setting']['watermarktype'];

$img->WatermarkTransparency = $_G['setting']['watermarktrans'];

$img->WatermarkQuality = $_G['setting']['watermarkquality'];

$img->parseImage($_G['setting']['attachdir'].$attachment);

$img->watermark($waterimage, '', $_G['setting']['watermarkstatus'], 0, 0);

$img->buildImage($_G['setting']['attachdir'].$attachment);

}

}

if($_G['setting']['thumbstatus'] && $_G['forum']['allowmediacode']) {

require_once libfile('class/image');

$img = new image;

$img->ThumbEnabled = $_G['setting']['thumbstatus'];

$img->ThumbWidth = $_G['setting']['thumbsourcewidth'];

$img->ThumbHeight = $_G['setting']['thumbsourceheight'];

$img->ThumbQuality = $_G['setting']['thumbquality'];

$img->parseImage($_G['setting']['attachdir'].$attachment);

$img->makeThumb();

$thumb = $img->getThumbTarget();

}

if(discuz_upload::is_image($attach['ext'])) {

require_once libfile('function/home');

$album = album_creat(array('albumname' => $_G['setting']['attachsave'], 'catid' => $_POST['catid'], 'uid' => $_G['uid'], 'username' => $_G['username']));

require_once libfile('class/attachment');

$attach = new forum_attachment;

$attach->set('aid', $aid);

$attach->set('tid', $_G['gp_tt']);

$attach->set('pid', $_G['gp_pp']);

$attach->set('uid', $_G['uid']);

$attach->set('tableid', $album['tableid']);

$attach->set('downloads', 0);

$attach->set('filename', $upload->attach['name']);

$attach->set('filetype', $upload->attach['ext']);

$attach->set('filesize', $upload->attach['size']);

$attach->set('attachment', $attachment);

$attach->set('remote', $_G['setting']['ftp']['on']);

$attach->set('width', $_G['gp_imgw']);

$attach->set('thumb', intval($thumb ? 1 : 0));

$attach->set('picid', $_G['gp_picid']);

$attach->set('isimage', $upload->attach['isimage']);

$attach->set('width', $upload->attach['imageinfo']['width']);

$attach->set('thumb_width', $_G['setting']['thumbsourcewidth']);

$attach->set('thumb_height', $_G['setting']['thumbsourceheight']);

$attach->set('remote', getglobal('setting/ftp/on'));

$attach->set('isimage', $upload->attach['isimage']);

$attach->set('thumb', intval($thumb ? 1 : 0));

$attach->set('picid', $picid);

$attach->set('aid', $attach->insert());

if($_G['gp_from'] == 'swfupload') {

getimagesize($upload->attach['target']);

}

$result = array(

'aid' => $attach->get('aid'),

'url' => $attach->get_url(),

'isimage' => $attach->get('isimage'),

'name' => $attach->get('filename'),

'type' => $attach->get('filetype'),

'size' => $attach->get('filesize'),

'attachrefkey' => $attach->get('attachrefkey'),

'attachrefurl' => $attach->get('attachrefurl'),

'imgw' => $attach->get('thumb_width'),

'imgh' => $attach->get('thumb_height'),

'ext' => $attach->get('filetype'),

'src' => $attach->get_src(),

'url' => $attach->get_url(),

'width' => $attach->attach['width'],

'height' => $attach->attach['height'],

'filesize' => $attach->attach['filesize'],

'attachId' =>

其他答案

Discuz是一款非常流行的开源论坛程序,广泛应用于各类在线社区。而阿里云OSS(Object Storage Service)是阿里云提供的云端对象存储服务,能够高效、安全地存储和管理大量的结构化和非结构化数据。

在Discuz中,如果需要上传文件到阿里云OSS,我们可以通过以下步骤进行操作:

1. 首先,我们需要在阿里云控制台中创建一个OSS实例,并获取到相应的Access Key ID和Access Key Secret。这些信息将用于与OSS进行身份验证。

2. 在Discuz后台中,我们需要找到相应的插件管理页面。可以通过点击“扩展”或者“插件”菜单,并找到与OSS文件上传相关的插件。

3. 安装并启用OSS插件。通常,在插件管理页面中,有一个对应的“安装”按钮或者“启用”按钮,点击后即可完成插件的安装或启用。

4. 进入OSS插件的设置页面。设置页面通常会要求填写OSS的相关信息,例如Endpoint(OSS服务的访问域名)、Bucket名称(存放文件的容器)、Access Key ID和Access Key Secret等。

5. 填写完相关信息后,保存并测试OSS插件的配置。一般会提供一个测试按钮,点击后插件会自动尝试连接到OSS并进行测试。如果测试通过,说明配置正确。

6. 在发布新的帖子或编辑已有的帖子时,我们可以看到上传文件的按钮已经被替换为OSS插件提供的上传按钮。点击上传按钮,选择相应的文件进行上传。

7. 在上传完成后,插件会返回一个URL地址,该地址是OSS上存储的文件的访问路径。我们可以将该地址粘贴到帖子中,实现在帖子中显示上传的文件或图片。

需要注意的是,使用OSS插件上传文件到阿里云OSS并不会替换Discuz本身的文件存储方式。上传到OSS的文件只是存储在OSS中,访问时需要通过OSS插件提供的URL地址进行访问。

总的来说,通过上述步骤,我们可以在Discuz中实现使用阿里云OSS进行文件上传的功能,从而提高文件的存储和访问效率,并保证文件的安全性。