скачать содержимое поля blob - PullRequest
0 голосов
/ 07 августа 2020
// Vuejs 2
// Laravel 7.x
// Axios
// SqlServer

Меня попросили сохранить файлы в db (я не понимаю почему), поэтому я отправляю данные из vue. js с помощью ax ios, которые я получаю в своем контроллере, и я сохранить его в моей базе данных.

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

с мой код помещает мне поврежденный файл, но я получаю правильное имя файла!

PUT IN DB

//Vue.js
<input type="file" class="form-control-file" id="file_1_detail" @change="fileUpload($event, 1)">
//my data vue.js
project: {
  title: null,
  description: null,
  detail: {
   description: null,
   files: {
     1: null,
     2: null,
     3: null,
     4: null,
     5: null
   }
  }
},
// methods
fileUpload(event, value){
  this.project.detail.files[value] = event.target.files[0];
},
submit(){
  let formData = new FormData();
  formData.append("detail_file_1", this.project.detail.files[1], this.project.detail.files[1].name);
  let settings = { headers: { 'content-type': 'multipart/form-data' } }
  axios.post('/project/new',
     formData,
     settings
  ).then(data => {
     console.log(data.data);
  });
},

Controller

Project::create([
   'attach1' => utf8_encode(file_get_contents($request->detail_file_1)) ,
   'attach1name' => $request->file('detail_file_1')->getClientOriginalName() ,
]);

Теперь на мой взгляд, чтобы получить и загрузить этот файл

Контроллер

$project = Project::with('project_details')->findOrFail($id);
return $project;

Просмотр

//donwload link
<a href="#" @click="downloadBlob(detail.attach1, detail.attach1name)">
   {{ detail.attach1name }}
</a>


// methodes
getProject(){
  axios.get('/project/'+this.projectId)
       .then(data => {
         console.log(data.data.project_details[0].attach1);//file
         this.details = data.data.project_details;
       });
},
downloadBlob(file, fileName) {
    let data = Base64.atob(file);
    let data = file;
    var a = document.createElement("a");
    document.body.appendChild(a);
    a.style = "display: none";
    var json = JSON.stringify(data),
    blob = new Blob([json], {type: "octet/stream"}),
    url = window.URL.createObjectURL(blob);
    a.href = url;
    a.download = fileName;
    a.click();
    window.URL.revokeObjectURL(url);
}

, и когда я щелкаю файл, он загружается с правильным именем файла и правильное расширение, но когда я хочу его открыть, он говорит, что файл поврежден! или неверный формат, спасибо за помощь!

EDIT

Blob content: "%PDF-1.3\n1 0 obj\n<< /Type /Catalog\n/Outlines 2 0 R\n/Pages 3 0 R >>\nendobj\n2 0 obj\n<< /Type /Outlin......

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...