解决 Dedecms 游客投稿图片字段无法上传的问题

在开发一个微商货源网站时,遇到了 Dedecms 游客投稿功能的一个问题:后台设置好游客投稿后,在前台发布时,上传图片字段仍需要登录才能上传。更糟糕的是,即使登录并上传了图片,也无法选择上传的图片。

为了解决这个问题,我们需要对相关代码进行修改。以下是具体步骤:

首先,在 archives_add.htm 文件中,需要对表单字段进行调整:

<label>货源封面:</label>
<input class="file" name="touxiang" type="file" id="touxiang" onchange="SeePicNew('divpicview',this);" />

接着,在 archives_add.php 文件中,添加以下代码以接收并保存上传的图片:

$filename = MemberUploads('touxiang','',$cfg_ml->M_ID,'image','',-1,-1,true);
SaveUploadInfo($title,$filename,1);

这里使用了 Dedecms 的 MemberUploads 函数来处理文件上传。接下来详细介绍该函数的参数:

1. $upname - 这是文件上传的 input 标签对应的名称。

2. $handname - 图片存储的文件夹名称。

3. $userid - 默认会员 ID。

4. $utype - 文件类型(如 image 表示图片)。

5. $exname - 文件上传后的名称。如果未指定,则会随机生成。

6. $maxwidth 和 $maxheight - 上传后图片的最大尺寸。

7. $water 和 $isadmin - 是否加水印和操作者是否为管理员。

upload.helper.php 文件中,可以找到 MemberUploads 函数的具体实现:

function MemberUploads($upname,$handname,$userid=0,$utype='image',$exname='',$maxwidth=0,$maxheight=0,$water=false,$isadmin=false)

如果要上传的文件夹不存在,函数会尝试自动创建:

if(!is_dir($cfg_basedir.$cfg_user_dir."/$userid"))
{
    MkdirAll($cfg_basedir.$cfg_user_dir."/$userid", $cfg_dir_purview);
    CloseFtp();
}

生成的文件名规则如下:

if($exname=='')
{
    $filename = $cfg_user_dir."/$userid/".dd2char($nowtme.'-'.mt_rand(1000,9999)).'.'.$sname;
}
else
{
    $filename = $cfg_user_dir."/{$userid}/{$exname}.".$sname;
}

通过上述方法,可以成功解决 Dedecms 游客投稿图片字段无法上传的问题。

希望本文能帮助到正在处理类似问题的开发者们!

换行标签:
空格标签: