php-laravel-文件上传(批量)下载-2020-3-6
功能:文件单个上传,文件单个和批量下载,单删数据库,批量删除数据库。不包括删除文件。
下载文件:
https://www.lanzous.com/ia04wcd
路由
//上传
Route::any('shangchuan','up\UploadController@upload');
Route::any('shangchuan/uploadwenjian','up\UploadController@uploadwenjian');
//管理(下载-删除)
Route::resource('shangchuanset','up\SetController');
Route::any('del','up\DelController@del');
Route::any('xiazai','up\DownloadController@index');
UploadController.php
<?php
namespace App\Http\Controllers\up;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
class UploadController extends Controller
{
public function upload(){
return view("up.shangchuan");
}
public function uploadwenjian(Request $request){
if($request->hasFile('file')&&$request->file('file')->isValid()){
$file=$request->file('file');
$name=$request->title;
$allowed_extensions = ["png", "jpg","txt","doc"];
if (!in_array($file->getClientOriginalExtension(), $allowed_extensions)) {
dd('不符合格式.');
}else{
$destinationPath = 'storage/uploads/'; //public 文件夹下面建 storage/uploads 文件夹
$extension = $file->getClientOriginalExtension();
//$fileName=md5(time().rand(1,1000)).'.'.$extension;
$fileName=$name.'.'.$extension;
$file->move($destinationPath,$fileName);
$filePath = asset($destinationPath.$fileName);
DB::table('wenjian')->insert([
'id' => null,
'fileName' => $name,
'type'=>$extension,
]);
//wenjian是数据表,id,fileName,type字段
dd('成功');
}
}else{
dd('图片上传失败请重试.');
}
}
}
shangchuan.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>文件上传</title>
<link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/3.3.7/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<br>
<br>
<br>
<br>
<div class="row">
<div class="col-md-10">
<form class="form-horizontal 8" role="form" action="/shangchuan/uploadwenjian" method="post" name="article" enctype="multipart/form-data">
<div class="form-group">
<h1>文件上传</h1>
<label for="title" class="col-md-2 control-label">姓名</label>
<div class="col-md-8">
<input type="text" class="form-control" id="title" name="title" placeholder="请输入姓名">
{{csrf_field()}}
</div>
</div>
<div class="form-group">
<label for="file" class="col-md-2 control-label">文件</label>
<div class="col-md-8">
<text>请上传png, jpg,txt,doc格式</text>
<input type="file" class="form-control" id="file" name="file" />
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="submit" class="btn btn-default">上传</button>
<button type="reset" class="btn btn-default">取消</button>
</div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
SetController.php
<?php
namespace App\Http\Controllers\up;
use DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
class SetController extends Controller
{
public function index(Request $request){
$data=\DB::select("select * from wenjian ");
return view("up.set")->with('data',$data);
//echo "123";
}
public function destroy(Request $request){
// 获取删除ID
$id=$request->input('id');
// 查询文件
$data=\DB::select("select * from wenjian where id=$id");
//wenjian是数据表
// 删除操作
// 删除成功 返回值1
// 删除失败 返回值0
if (\DB::delete("delete from wenjian where id=$id")) {
# code...
// 删除成功 删除图片
return "1";
}else{
return "0";
}
}
}
set.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>文件管理</title>
<script src="https://code.jquery.com/jquery-3.4.1.js"></script>
</head>
<body>
<h1>文件管理</h1>
<table>
总数:
共有{{count($data)}}次
<hr>
<button class="pl">批量删除</button>
<button class="plx">批量下载</button>
<hr>
<th><input type="checkbox" id="checkall" onclick="checkall()"/></th>
<th>ID</th>
<th>FILENAME</th>
<th>TYPE</th>
<th>操作</th>
@foreach($data as $value)
<tr>
<td><input type="checkbox" name="checkid" value="{{ $value->id }}"></td>
<td>{{$value->id}}</td>
<td>{{$value->fileName}}</td>
<td>{{$value->type}}</td>
<td>
<a href="javascript:;" onclick="xia(this,{{$value->id}})">下载</a>
<a href="javascript:;" onclick="del(this,{{$value->id}})">删除</a></td>
</tr>
@endforeach
</table>
<script>
// 全选
function checkall(){
$("[name='checkid']").prop("checked",$("#checkall").prop("checked"));
}
</script>
<script>
//批量删除
$(".pl").click(function(){
var box = $("input[name='checkid']");
length =box.length;
//alert(length);
var str ="";
for(var i=0;i<length;i++){
if(box[i].checked==true){
str =str+","+box[i].value;
}
}
str= str.substr(1)
//alert(str)
location.href="del?id="+str;
})
//批量下载
$(".plx").click(function(){
var box = $("input[name='checkid']");
length =box.length;
//alert(length);
var str ="";
for(var i=0;i<length;i++){
if(box[i].checked==true){
window.open('/xiazai?id='+box[i].value);
}
}
})
</script>
<script>
function del(obj,id){
$.post('/shangchuanset/'+id,{'id':id,'_method':'delete','_token':'{{ csrf_token() }}'},
function(data)
{
location.reload([true])
});
}
function xia(obj,id){
$.post('/xiazai/'+id,{'id':id,'_method':'get','_token':'{{ csrf_token() }}'},
window.open('/xiazai?id='+id),
function(data)
{
});
}
</script>
</body>
</html>
DownloadController.php
<?php
namespace App\Http\Controllers\up;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use DB;
use Illuminate\Support\Facades\Storage;
class DownloadController extends Controller
{
public function index(Request $request){
$id = $request->input('id');
$data=DB::table("wenjian")->where("id",$id)->first();
$fileName = $data->fileName;
$type = $data->type;
$data = 'storage/uploads/'.$fileName.'.'.$type;
return response()->download($data);
}
}
DelController.php
<?php
namespace App\Http\Controllers\up;
use DB;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Storage;
class DelController extends Controller
{
public function del(Request $request){
// $id = input::get('id');
$id = $request->input('id');
$str = explode(",",$id);
foreach($str as $value){
DB::table('wenjian')->where('id',"=","$value")->delete();
}
return "成功";
}
}