2016-11-23 3 views
0

Привет, ребята, мне просто нужна помощь на моей странице загрузки в моем проекте, потому что мне нужно иметь страницу загрузки, в которой хранятся файлы из разных папок. Вся папка находится в общедоступном пути. некоторые идеи для этого я использую страницу, как и ссылку ниже, просто игнорируют другую кнопку.laravel 4 скачать файл из разных папок

Download Page

я просто попытался Ajax для этого, но он не работает

это мое мнение:

@include('partials.navbar') 
<link rel="stylesheet" type="text/css" href="http://localhost:8000/assets/css/jquery.dataTables.min.css"> 
<link rel="stylesheet" type="text/css" href="http://localhost:8000/assets/css/search.css"> 
<!-- Search --> 
<div class="container"> 
    <!-- Search --> 
<div class="container"> 
<div class="row"> 
<div class="col-md-12"> 
<div class="input-group" id="adv-search"> 
    <input type="text" class="form-control" placeholder="Search file" /> 
     <div class="input-group-btn"> 
     <div class="btn-group" role="group"> 
     <div class="dropdown dropdown-lg"> 
      <button type="button" class="set-width btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><span class="caret"></span></button> 
     <div class="dropdown-menu dropdown-menu-right" role="menu"> 
      <form class="form-horizontal" role="form"> 
       <div class="form-group"> 
        <label for="file">File type</label> 
        <select class="form-control"> 
        <option value="pf">Public Weather Forecast</option> 
        <option value="sf">24 Shipping Forecast</option> 
        <option value="gale">Gale Warning Forecast</option> 
        <option value="advisory">Weather Advisory</option> 
        <option value="tca">Tropical Cyclone Advisory</option> 
        <option value="swb">Severe Weather Bulletin</option> 
        <option value="iws">International Warning for shipping</option> 
        <option value="wof">Weather Outlook Forecast</option> 
        <option value="spf">Special Forecast</option> 
        <option value="sm">Surface Maps</option> 
        </select> 
       </div> 
     <div class="form-group"> 
      <label for="date">Date</label> 
      <input class="form-control" type="date" /> 
     </div> 
     <div class="form-group"> 
      <label for="file">File name</label> 
      <input class="form-control" type="text" /> 
     </div> 
      <button type="submit" class="btn btn-primary"><i class="fa fa-search"></i></button> 
      </form> 
     </div> 
     </div> 
      <button type="button" class="btn btn-primary"><i class="fa fa-search"></i></button> 
     </div> 
     </div> 
</div> 
</div> 
</div> 
</div> 
</div> 

<!--- Datatable --> 

<div class="container"> 
<div class="row">  
<div class="col-md-12"> 
    <h4>Downloads</h4> 
    <table id="mytable" class="display" cellspacing="0" width="100%"> 
    <thead> 
     <tr> 
     <th>File Name</th> 
     <th>Date Issued</th> 
     <th>File ID Number</th> 
     <th>Uploader</th> 

     <th>Action</th> 
     </tr> 
    </thead> 
    <tfoot> 
     <tr> 
     <th>File Name</th> 
     <th>Date Issued</th> 
     <th>File ID Number</th> 
     <th>Uploader</th> 

     <th>Action</th> 
     </tr> 
     </tfoot> 
     <tbody> 
     @foreach ($files as $files2) 
     <tr> 
     <td>{{ $files2->file_name }}</td> 
     <td>{{ $files2->date }}</td> 
     <td>{{ $files2->id }}</td> 
     <td>{{ $files2->username }}</td> 

     <td><a data-id="{{ $files2->id }}" href="/download" class="btn btn-primary btn-xs dload-button" ><i class="fa fa-download"></i></a> 
     <button data-id="" class="btn btn-primary btn-xs dload-button" data-title="Dload" data-toggle="modal" data-target="#dload-modal"><i class="fa fa-file-text"></i></button></td> 
     </tr> 

     @endforeach 

    </tbody> 
    </table> 
    <input type="hidden" name="id" value=""> 
    <input type="hidden" name="type" value=""> 
    <input type="hidden" name="filename" value=""> 
</div> 
</div> 
</div> 
</div> 

@include('partials.footer') 
<script type="text/javascript" src="http://localhost:8000/assets/js/jquery.dataTables.min.js"></script> 
<script type="text/javascript" src="http://localhost:8000/assets/js/dropdown.js"></script>  
<script type="text/javascript" src="http://localhost:8000/assets/js/datatable.js"></script> 
<script> 
$(function() { 
$(".dload-button").click(function(){ 
    var param = $(this).data('id'); 
    $.ajax({ 
     url: "/downloadfile/" + param, 
     success: function(msg){ 
      var dload = JSON.parse(msg)[0]; 
      console.log(dload) 
      $('#id').val(dload.id); 
      $('#type').val(dload.file_type); 
      $('#filename').val(dload.upload); 
     }, 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
    }); 
}); 

мой контроллер:

public function dloadFile($id) 
    { 
     $files = Files::where('id',$id) 
        ->get(); 
     return json_encode($files); 
    } 

    public function getDownload() 
    { 
     $id = Input::get('id'); 
     $files = Files::where('id',$id) 
        ->first(); 
     $ftype = $files->file_type = Input::get('type'); 
     $filename = $files->upload = Input::file('filename'); 
     $file= public_path(). "uploads/{$ftype}"; 

     $headers = array(
       'Content-Type: => application/pdf', 
      ); 

     return Response::download($file, '{$filename}', $headers); 


    } 

мой маршрут:

Route::get('/downloadfile/{id}', '[email protected]'); 
Route::get('/download', array('uses' => '[email protected]')); 

Любая идея гораздо более ценится. Заранее спасибо !.

ответ

0

нет необходимости использовать Ajax для скачивания. есть мой код для загрузки продукта image.in view file есть ссылка для скачивания.

<a data-id="{{ $product->id }}" href="/productCRUD/{{$product->id}}/download" class="btn btn-primary btn-xs dload-button" ><i class="fa fa-download">Download</i></a> 

в routes.php

Route::get('productCRUD/{product}/download', '[email protected]'); 

в productCRUDController.php

public function download($id) 
{ 

    $files = Product::where('id',$id) 
       ->first(); 
    $ftype = $files->file_type = Input::get('type'); 
    $fullPath= public_path(). "/uploads/{$files->filePath}"; 
    $headers = array(
      'Content-Type: => application/jpg', 
     ); 
    return Response::download($fullPath,$files->filePath, $headers); 

} 

с этим кодом при нажатии на ссылку загрузки вы получите файл в папку загрузок.

+0

как насчет того, будет ли файл, который я буду загружать, является файлом PDF и файлом изображения, я бы добавил дополнительный код в массив? например: $ headers = array ( 'Content-Type: => application/jpg', \t 'Content-Type: => application/pdf', ); –

+0

Да, вы можете добавить в массив согласно вашим требованиям. –

+0

спасибо за эту идею, но все же я получил некоторую ошибку, которая отображает файл, не найденный в моем общедоступном пути, и я путаюсь в {$ files-> filepath}, где это? –