Как заставить файл скачать, когда получить путь к файлу в ответе AJAX - PullRequest
0 голосов
/ 23 октября 2019

Я хочу загрузить файл на свой сервер. У меня есть следующий код, который я пробовал, но файл не загружается. Я объединяю несколько файлов в один файл, затем после слияния хочу, чтобы файл результатов был загружен. Теперь файлы объединяются в result.docx, но не загружаются автоматически

Я возвращаю полный путь к файлу в ответе ajax

Скрипт

        $("#download_specs").click(function(){

            var slug = this.getAttribute('data-id');

            $.ajax({
                url:"{{url('merge-document')}}",
                method: 'POST',
                headers: {
                    'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
                },
                data:{slug:slug} ,

                success:function(data){

                var zz=document.createElement('a');
                zz.href = data;
                }
            });
        });

Контроллер

    public function mergeDocuments(Request $request){

        $project_slug  = $request->input('slug');

        $userID = Auth::user()->id;
        $files = DB::table('project_specs_files')->select('completed_specs')->where('user_id',$userID)->where('project_slug',$project_slug)->get();

        $specs_array = array();
        foreach($files as $file){

            $ext = pathinfo(public_path(). '\\uploads\\complete_specs\\'.$userID.'\\files\\'.$file->completed_specs, PATHINFO_EXTENSION);
            if($ext == 'docx'){
                if (file_exists(public_path(). '\\uploads\\complete_specs\\'.$userID.'\\files\\'.$file->completed_specs)){

                    $specs_array[] =  public_path(). '\\uploads\\complete_specs\\'.$userID.'\\files\\'.$file->completed_specs ;
                }       
            } 
        }
        if(!empty($specs_array)){
            $dir = public_path(). '\\uploads\\complete_specs\\'.$userID.'\\files\\';
            $dm = new DocxMerge();
            $dm->merge($specs_array, $dir.'result.docx' );
        }else{

            return 'Files not supported for merge';
        }

        return $dir.'result.docx';

    }

взамен я получаю 'D:\xampp\zerodocs\public\uploads\complete_specs\4\files\result.docx'

1 Ответ

0 голосов
/ 23 октября 2019

Самое простое решение - использовать браузер для его загрузки вместо использования javascript fs, так как это может привести к повреждению данных.
Эта функция создает тег href и щелкает его для инициализации загрузки. Надеюсь, это поможет

function _downloadUrlContent(url) {
    const a = document.createElement('a');
    a.href = url;
    a.download = '';
    a.style.display = 'none';
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...