Невозможно удалить файл, если файл переименован в Laravel - PullRequest
0 голосов
/ 21 января 2020

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

var myDropzone = new Dropzone("div#dropzoneFileUpload", {
  addRemoveLinks: true,
  url: baseUrl+"/img/upload/store",
  params: {
    _token: token,
  },
  success: function (data, textStatus, XmlHttpRequest){

  },

  removedfile: function(file) {

    var name = file.upload.filename;
    jQuery.ajax({
      headers: {
        'X-CSRF-TOKEN': jQuery('meta[name="_token"]').attr('content')
      },
      type: 'POST',
      url: '{{ url("delete") }}',
      data: {filename: name},
      success: function (data){
        console.log("File has been successfully removed!!");
      },
      error: function(e) {
        console.log(e);
      }});
    var fileRef;
    return (fileRef = file.previewElement) != null ?
        fileRef.parentNode.removeChild(file.previewElement) : void 0;

  },

});

1 Ответ

0 голосов
/ 21 января 2020

Я предлагаю следующее:

В методе успеха вы должны получить загруженный файл обратно в качестве первого аргумента (то, что у вас сейчас есть как data), а вторым аргументом будет новое имя вы отправляете обратно (то, что у вас сейчас есть как textStatus).

С этим вы можете l oop текущие файлы в Dropzone, находя правильный файл из списка на основе файла, который вы получить в качестве первого аргумента в ответе, а затем соответственно изменить его имя. Таким образом, когда вы нажимаете «Удалить», оно будет иметь правильное имя

. Обратите внимание на следующий измененный псевдокод , который предполагает, что вы отправляете новое имя файла с сервера.

var myDropzone = new Dropzone("div#dropzoneFileUpload", {
   addRemoveLinks: true, 
   url: baseUrl+"/img/upload/store",
   params: {
    _token: token,
   },
  success: function (fileSentToServer, newFileName){
   // Access the current files in the list/dropzone
   var fileList =  myDropzone.files;
   // Loop over
   fileList.forEach(file => {
     //Find the corresponding file in the list you just uploaded
     if(file.name == fileSentToServer.name) {
       //Rename it
       file.name = newFileName
     }
   })
  }, 

 removedfile: function(file) {
    // This name should now be the renamed version
    var name = file.upload.filename;
    jQuery.ajax({...

 },

});

Также возможно, что вам даже может не понадобиться l oop, если параметр file, возвращаемый в методе успеха, является прямой ссылкой на файл в списке файлов.

...