Laravel 项目集成又拍云存储
打赏作者

49gd

又拍也是有槽点的,节点被攻击是不会切换的。。。。上次亲身体验到了。。

JellyBool 回复 49gd

是指又拍云他们的节点被攻击么?

49gd 回复 JellyBool

是的 上次他们的节点被攻击了 还是附近的访客解析到那个节点上。。。。

JellyBool 回复 49gd

尴尬。。。。

tingt123 回复 49gd

HI 抱歉造成困扰,您那边的问题可能是由于DNS缓存、调整解析存在延时等情况导致的。又拍云功能上是支持自动调配、切换解析的哈。

JellyBool 回复 tingt123

你是又拍云的小伙伴么

tingt123 回复 JellyBool

哈哈 是的啊

JellyBool 回复 tingt123

阔以阔以。。。

xiaofengzhi

这个package是怎么实现的能简单说下流程或者思路吗?

JellyBool 回复 xiaofengzhi

最好的办法就是去看源码

328333982

##老大,我想问一下,你这个网站的评论表是单表吗?还是多表关联?

JellyBool 回复 328333982

一个评论的表

wuchenge

Client error: PUT http://v0.api.upyun.com/hezuopingtai/ resulted in a 403 Forbidden response:
{“msg”:“path is not a file, maybe a directory”,“code”:40300015,“id”:“81004e90ea54e96bcf3a578de9035808”}
return Storage::disk(‘upyun’)->put(’/’, $request->file(‘file_data’));
按视频的方法出现这个问题。

JellyBool 回复 wuchenge

我试了一下,我这边还是没有出现什么问题。可以把相关代码贴出来看看么?

wuchenge
@include('work.common.header')
<form action="{url('api/up_upyun')}" enctype="multipart/form-data" method="POST" role="form">
	<legend>上传图片</legend>
	{csrf_field()}
	<div class="form-group">
		<label for="">label</label>
		<input type="file" class="form-control" id="" name="file_data">
	</div>

	<div class="form-group">
		<input type="submit" class="form-control" id="" value="上传图片">
	</div>

</form>

// 上传到upanyun
  function up_upyun(Request $request)
  {
    return Storage::disk('upyun')->put('/', $request->file('file_data'));
  }

Client error: PUT http://v0.api.upyun.com/hezuopingtai/ resulted in a 403 Forbidden response:
{“msg”:“path is not a file, maybe a directory”,“code”:40300015,“id”:“6ee88706e6e5424c7ef4b7a2d8059f49”}

JellyBool 回复 wuchenge

感觉没有什么问题,可否提供一下你的 flysystem/upyun 的版本。
还有试试这样:

Storage::disk('upyun')->put('', $request->file('file_data'));
Storage::disk('upyun')->put('/avatar', $request->file('file_data'));

这种也是一样报错么?

wuchenge 回复 JellyBool

“require”: {
“php”: “>=5.5.9”,
“laravel/framework”: “5.2.*”,
“jellybool/flysystem-upyun”: “^1.0”
},
是直接composer您的github

JellyBool 回复 wuchenge

感觉看不出什么问题了,我现在只能是猜测你的 $request->file('file_data') 没有拿到文件具体的内容了

wuchenge 回复 JellyBool
<form action="/images" enctype="multipart/form-data" method="POST" role="form">
                    <legend>上传图片</legend>
                    {csrf_field()}
                    <div class="form-group">
                        <label for="">label</label>
                        <input type="file" class="form-control" id="" name="file_data">
                    </div>

                    <div class="form-group">
                        <input type="submit" class="form-control" id="" value="上传图片">
                    </div>

                </form>
用laravel5.4成功了。
use Illuminate\Http\Request;

Route::get('/', function () {
    return view('welcome');
});


Route::post('/images', function (Request $request) {
	// return $request->file('file_data');
  return Storage::disk('upyun')->put('/', $request->file('file_data'));
});
laravel5.2
// 上传到upanyun
  function up_upyun(Request $request)
  {
    return Storage::disk('upyun')->put('', $request->file('file_data'));
  }

报错了。

JellyBool 回复 wuchenge

额。。。就是你的这个没有接收到的 file 的内容吧

 function up_upyun(Request $request)
  {
    return Storage::disk('upyun')->put('', $request->file('file_data'));
  }
wuchenge 回复 JellyBool

不是,在5。2里
$entension = $file -> getClientOriginalExtension();
//这个表示的是缓存在tmp文件夹下的文件的绝对路径
$real_path = $file -> getRealPath();
// 缓存在tmp文件夹中的文件名 例如 php8933.tmp 这种类型的.
$tmpName = file ->getFileName(); //文件类型 //mimeTye = $file -> getMimeType();
//上传后的文件名
$new_name = date(‘His’) . mt_rand(1001, 9999) . ‘.’ . $entension;
//文件路径
$path = ‘/uploads/images/article/’ . date(‘Y’) . ‘/’ . date(‘m’);
$re_path = public_path() . $path;
我这样上传到本地是可以成功的。上传到upyun提示报错。不管是Storage::disk(‘upyun’)->put(’’, $request->file(‘file_data’));还是Storage::disk(‘upyun’)->put(’/’, $request->file(‘file_data’));
然而5。4就能成功上传到upyun

JellyBool 回复 wuchenge

我一直认为是 up_upyun(Request $request) 这 request 注入没成功

wuchenge 回复 JellyBool

不是。因为我上传到本地成功了
// 上传到upanyun

  function up_upyun(Request $request)
  {
    $input      = Input::all();
    $file       = Input::file('file_data');
    $state      = array_key_exists('state', $input) ? intval($input['state']) : 1;
    $res        = $file -> isValid();
    if($res)
    {
      //上传文件的后缀.
      $entension = $file -> getClientOriginalExtension(); 
      //这个表示的是缓存在tmp文件夹下的文件的绝对路径
      $real_path = $file -> getRealPath(); 
      // 缓存在tmp文件夹中的文件名 例如 php8933.tmp 这种类型的.
      $tmpName = $file ->getFileName(); 
      //文件类型
      //$mimeTye = $file -> getMimeType();
      //上传后的文件名
      $new_name       = date('His') . mt_rand(1001, 9999) . '.' . $entension;
      //文件路径
      $path           = '/uploads/images/article/' . date('Y') . '/' . date('m');
      $re_path        = public_path() . $path;

      //创建文件夹
      $this->_mk_dir($re_path);

      $res            = $file->move($re_path, $new_name);
      if($res)
      {
        //插入到图片表
        $src        = $path . '/' . $new_name;
        $data       = ['path' => $src, 'state' => $state, 'ctime' => $_SERVER['REQUEST_TIME']];
        Img::create($data);
        $data       = ['status' => true, 'msg' => '成功!', 'file_name' => $src];
      }
      else
      {
        $data       = ['status' => false, 'msg' => '文件出错!'];   
      }
      return $data;
    }
    else
    {
      $data   = ['status' => false, 'msg' => '文件出错!'];
      return $data;
    }
  }

// 上传到upanyun
  function up_upyun(Request $request)
  {
    return Storage::disk('upyun')->put('', $request->file('file_data'));
  return Storage::disk('upyun')->put('/', $request->file('file_data'));
  }

失败。
所以认为您这个packages应该有laravel版本要求。

JellyBool 回复 wuchenge

我去试验一下,laravel 5.2 ,我记得之前测试时完全没有问题的。。。就算 5.1 我也可以使用。

wuchenge 回复 JellyBool

您5.2试验怎么样?

JellyBool 回复 wuchenge

恩,试验回来了。貌似是因为在 5.2 或之前的版本,Flysystem 的 put 方法实现有点不一样,所以会报错。但是这个 package 还是可以用的(只是 Flysystem 的接口不太一样)。比如你可以这样用:

Route::post('/images', function (Request $request) {
    $file = $request->file('image');
    $filename = '/'.time().'.'.$file->guessClientExtension();
    Storage::disk('upyun')->writeStream($filename, fopen($file->getRealPath(),'r'));
});

我翻了一下代码,5.1 的时候,我就是像上面这样用的。

wuchenge 回复 JellyBool

// 上传到upanyun
function up_upyun(Request $request)
{
$file = $request->file(‘file_data’);
$entension = $file ->getClientOriginalExtension();
$new_name = date(‘His’) . mt_rand(1001, 9999) . ‘.’ . $entension;
$path = ‘/img/’ . date(‘Y’) . ‘/’ . date(‘m’) . ‘/’ . $new_name;
res=Storage::disk(upyun)>writeStream(res = Storage::disk('upyun')->writeStream(path, fopen($request->file(‘file_data’), ‘r’));

$data       = ['status' => false, 'msg' => '文件出错!'];
if($res)
  $data       = ['status' => true, 'msg' => '成功!', 'file_name' => env('UPYUN_PROTOCOL') . '://' . env('QINIU_DOMAIN') . $path];

return $data;

}
嗯这是刚刚整理的5.2上传代码。

wuchenge 回复 JellyBool

5.2里这样可以上传成功。Storage::disk(‘upyun’)->writeStream(‘files.jpg’, fopen($request->file(‘file_data’), ‘r’));

可能一:没有生成随机名。因为我传’/'报path is not a file, maybe a directory
可能二:put的第二个参数没有被实例。Storage::disk(‘upyun’)->put(‘test.jpg’, $request->file(‘file_data’));可以在upyun 上生成test.jpg,但是里面什么都没有。

JellyBool 回复 wuchenge

在 5.2 的时候,由于 Flysystem 的接口实现不太一样,文件随机的名字得你自己生成和维护,你也需要注意的是 Storage::disk('upyun')->writeStream($filename, fopen($file->getRealPath(),'r')); }); 返回布尔值,所以这个随机名字是得自己维护的。

第二,Flysystem 的 put 实现不太一样,导致的问题

wuchenge

我的laravel 5.2

UncleCaozy

标题 测试markdown

JellyBool 回复 UncleCaozy

# 与文字直接加个空格

cyt850160757

讲师不能只买laravel的视频吗?挺需要的

JellyBool 回复 cyt850160757

视频单卖的话,是没有开放了

49gd

我有个问题 这样算是中转传到又拍吗

JellyBool 回复 49gd

这个问题,我感觉不算,直接传到 又拍云了

sweida

很难受,安装时报错,说没有 upyun/sdk ^3.0 ,然后安装upyun/sdk, 又提示 upyun/sdk 3.3.0 requires ext-curl,崩溃

feifadaima

path=date(Y)./.date(m)./.date(d);path = date('Y').'/'.date('m').'/'.date('d'); result=Storage::disk(‘upyun’)->writeStream(path,fopen(path,fopen(request->file(‘file’),‘r’));

一直返回 File already exists at path: 2019/03/15

$entension = $file ->getClientOriginalExtension();
$new_name = date(‘YmdHis’) . mt_rand(1001, 9999) . ‘.’ . $entension;
path=date(Y)./.date(m)./.date(d).path = date('Y').'/'.date('m').'/'.date('d').new_name;
result=Storage::disk(upyun)>writeStream(result=Storage::disk('upyun')->writeStream(path,fopen($request->file(‘file’),‘r’));

如果这样写,直接服务器就500了

sweida

上传图片报"Class App\Http\Controllers\Ruquest does not exist"又是什么回事