Загрузка файла на BrickFTP с помощью Dropzone

Я пытался реализовать загрузку файлов на BrickFTP с помощью Dropzone, но загруженный файл не открывается, так как он содержит WebKitFormBoundary вверху содержимого файла.

Я добавляю метод PUT в конфигурацию Dropzone согласно документации BrickFTP. BrickFTP использует Amazon S3, поэтому файлы фактически загружаются на S3. Я сделал все в соответствии с их документацией, и все работало, за исключением этой последней проблемы, с которой я столкнулся с этой дополнительной информацией в верхней части загруженного содержимого файла.

Вот код Coffeescript, отвечающий за загрузку файла:

brickFTPData = {}

# As per BrickFTP docs, step 1 is 
# to get the dedicated upload url for each file by sending a  
# request to REST API to indicate intent to upload a file
getUploadUri = (file) ->
   result = ""
   $.ajax
      url      : '/a/portal-dev/get-api-keys'
      type     : 'POST'
      dataType : 'json'
      data     : { file_name: file.name }
      async    : false
      success  : (data, textStatus, jqXHR) ->
         brickFTPData[file.upload.uuid] =
            file_name   : file.name
            upload_uri  : data.upload_uri
            ref         : data.ref
         result = data.upload_uri
   return result

# 3rd step is to notify the REST API that the file upload is complete.
finishUpload = (file) ->
   $.ajax
      url      : '/a/portal-dev/upload-done'
      type     : 'POST'
      dataType : 'json'
      data     :
         ref         : brickFTPData[file.upload.uuid].ref
         file_name   : brickFTPData[file.upload.uuid].file_name
      success  : (data) ->
         delete brickFTPData[file.upload.uuid]
         console.log data.status

# 2nd step is to upload the file
sampleQuoteDropzone = new Dropzone "#sampleQuoteDropzone",
   url            : '/demo'
   method         : 'PUT'
   headers        : {"Content-Type": "application/octet-stream"}
   success        : (file, request) ->
      finishUpload(file)

sampleQuoteDropzone.on 'processing', (file) ->
   upload_uri = getUploadUri(file)
   sampleQuoteDropzone.options.url = upload_uri

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

------WebKitFormBoundaryw4bIakMBbkp7ES2E
Content-Disposition: form-data; name="file"; filename="IMG_5652.jpg"
Content-Type: image/jpeg

Если я удалю эти строки и сохраню файл, он будет работать.

Но эта проблема не наблюдается при загрузке файла с помощью обычного вызова ajax за пределами Dropzone. Ниже приведен рабочий код:

$.ajax
     url: data.upload_uri
     type: 'PUT'
     contentType: 'application/octet-stream'
     data: file
     processData: false
     success: (response) ->
        finishUpload(file, data)

Кто-нибудь может посоветовать, как решить эту проблему?


person Atiqur Rahman Sumon    schedule 06.11.2017    source источник


Ответы (1)


Я решил проблему с помощью следующего кода:

sampleQuoteDropzone.on 'sending', (data, xhr, formData) ->
   _send = xhr.send
   xhr.send = ->
      _send.call(xhr, data)

Это решение было найдено здесь. Я видел это, прежде чем публиковать этот вопрос здесь, но не был уверен, что это правильная проблема/решение. Я связался с BrickFTP, и они ответили довольно быстро, сказав, что это решение может работать для меня, и да, оно определенно работает.

person Atiqur Rahman Sumon    schedule 07.11.2017