Я пытался реализовать загрузку файлов на 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)
Кто-нибудь может посоветовать, как решить эту проблему?