1. 程式人生 > >前端上傳圖片到七牛雲

前端上傳圖片到七牛雲

先說一下大致思路,前端到後臺獲取七牛上傳token,前端上傳圖片到七牛,成功後將圖片地址返回給後臺。

廢話不說,直接貼程式碼(極簡版)

<html>
<head>
    <!--引入jquery-->
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.js"></script>
</head>
<body>
<form id="upload">
<input type="file" name="file"><!--選擇圖片-->
    <!--獲取並填寫token 可後臺java或php生成即可-->
<input type="text" name="token" value=''>
<button type="submit">提交</button>
</form>
</body>
</html>

<script>
    // 按鈕點選事件
$('#upload').on('submit',function (e) {
    // 關閉預設的提交改為ajax提交
    e.preventDefault();
        // 新建一個表單內容內容為原表單內容
        var formData = new FormData(e.target);
        $.ajax(
          {
        type: 'POST',//型別為post提交方式
        url: 'http://upload-z1.qiniup.com',//地址根據存取區域進行填寫
        contentType: false,
        data: formData,
        processData: false,//不轉化為資訊
        success: function (r) {
          console.log(r);  //上傳成功則列印返回值  有key 和hash
        },
        error: function (r) {
          console.log(r);
        }
      }
    );
  });
</script>

最簡單粗暴的表單上傳,當然token還需要後臺獲取。下面看一下專案中的運用

php獲取token:

    //獲取後臺上傳token
    public function getToken()
    {
         //上傳策略
        $policyFields =[
            'mimeLimit'=>'image/jpeg;image/png',
        ];
        $expires = 3600;

        $accessKey = Config::get('qiniu.accessKey');//獲取七牛AK
        $secretKey = Config::get('qiniu.secretKey');//獲取七牛SK
        $auth = new Auth($accessKey, $secretKey);
        $bucket = Config::get('qiniu.appimgbucket');//設定儲存空間
        $token = $auth->uploadToken($bucket);
        //$token = $auth->uploadToken($bucket,null,$expires,$policyFields);//若需要限制上傳檔案型別,則在生成token時新增上傳策略即可
        echo json_encode(getReturnData(200,'獲取token成功',$token));
    }

注:需先引入七牛php SDK

如在thinkphp中進行引入 :

vendor('php_sdk.autoload');
use Qiniu\Auth as Auth;

接下來看下前端的html 

<form id="addform">
            <table class="table table-bg">
                <tbody>
                <tr>
                    <th width="140" class="text-r"><span class="c-red">*</span> 選擇圖片:</th>
                    <td><input type="file" style="width:300px"  id="imgaddr" name="imgaddr" ></td>
                </tr>       
                <tr>
                <td class="text-c" colspan="2"><button class="btn btn-success radius" onclick="saveimg('儲存圖片地址','獲取token地址')"><i class="icon-ok"></i> 確定</button></td>
                </tr>
                </tbody>
            </table>
</form>

後端的js

//第一步 獲取token
function saveimg(addurl,tokenurl) {
    $.post(tokenurl,{d:'d'},function(result){
          var token=result.data;
        saveimgtoqiniu(addurl,token);
        },'json');

}
//第二步 將圖片傳到七牛
function saveimgtoqiniu(addurl,token) {
    var formData = new FormData();
    formData.append("file",  $('#imgaddr')[0].files[0]);
    formData.append("token", token);
    $.ajax(
        {
            type: 'POST',
            url: 'http://up-z0.qiniup.com',
            contentType: false,
            data: formData,
            processData: false,
            async :false,//設定格式為同步非非同步 不然可能會報錯無法儲存到臨時變數/物件
            dataType:'json',
            success: function (r) {
                console.log(r);
                var imgurl='你的圖片地址'+r.key;//獲取到key值後拼接圖片地址
                saveimgtoserver(addurl,imgurl);//第三步:將圖片地址傳到後臺伺服器即可
            },
            error: function (r) {
                console.log(r);
            }
        });
}