总是出现token not specified错误,新手急盼!

我后台使用thinkphp框架,在本地127.0.0.1调试:

下面是后台代码:

    Vendor('Qiniu.rs');  //可以正常导入文件rs.php
    $bucket = 'mybucket';
    $accessKey = 'my-aKey'; 
    $secretKey = 'my-sKey';
    Qiniu_SetKeys($accessKey, $secretKey);
    $putPolicy = new Qiniu_RS_PutPolicy($bucket);
    $Token = $putPolicy->Token(null);
下面是生成token后的前端代码:
    < form id="uploadForm" method="post" action="http://up.qiniu.com/" enctype="multipart/form-data">
      <textarea id="pic_content" maxlength="500" style="height:100px;"></textarea>
     <input name="token" type="hidden" value="EREsb1IH3dlsIPi4duVIOS6ynwnYjy7ezgs44PaU:OADj4JxkZEZ91SehDTqmkS2yATY=:eyJzY29wZSI6ImNlbndhdGVyIiwiZGVhZGxpbmUiOjEzODc3MjkyNDd9">
     <button type="button" id="fileSubmit">确认上传</button>
     <input type="reset"  value="清 除">
     <button type="button" id="selectpic">插入图片</button>
    <input type="file" id="upfile" accept="image/*" capture>
    < /form>

点击上传后,出现上传失败!{"error":"token not specified"},,,请各位给看看哪里出问题了。谢谢,

还有个问题是:
conf.php里有global $QINIU_ACCESS_KEY;global $QINIU_SECRET_KEY;两个全局变量定义,为什么还要在文件里再次定义:

$accessKey = 'my-aKey'; $secretKey = 'my-sKey';
Qiniu_SetKeys($accessKey, $secretKey);

且为何不把$bucket也加入conf.php中定义成全局变量,这样后台生成token代码更简洁。

阅读 21.4k
5 个回答

建议看看:

从你这里的代码看,我暂时只看出一个问题:

    <input type="file" id="upfile" accept="image/*" capture>

改为:

    <input type="file" name="file" accept="image/*" capture>

关于 $bucket 为什么不是 conf,是因为:一个账号不一定只有一个 bucket,所以它不是单例。

大部分框架为了优化上传过程的交互,使用的是第三方的上传组件,绑定input:file的change事件。
那么实际上,原表单的内容是没有被加入到上传内容中的,以swfupload为例,需要手动设置settings中的post_params,或者调用swfobject的addPostParam方法。
可以往这个方向检查一下。

谢谢两位的答复。
现在这个问题解决了,答案是二位的回复中所提,
第一个是file上传控件必须包含name="file"才可以,注意是name,不是id,id可以是任意值。
第二个是我采用的是ajax上传,(开始提问中没有说清楚),在ajax上传中,要手动传入参数:文件控件、token、自设变量等。 我这里错误是没有手动传入token。

我觉得七牛应该完善开发文档,以上两点,至少文档中没有明确的说明,造成新手的困惑,这种说明一下即可绕过的坑,而没有明确说明,新手容易掉进坑里绕很多弯路。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
七牛云问答
子站问答
访问
宣传栏