У меня есть команда curl, которую я хочу адаптировать к javascript с помощью ajax.
curl -v -X 'POST' --data-binary @BinaryData.bin.txt "http://127.0.0.1:3000/api/v1/update_data"
В javascript я использовал FileReader () и считал файл как Text, BinaryString, Array Buffer с различными настройками параметров ajaxдля processData, contentType, cache и т. д. несколько раз, но не удалось отправить правильную двоичную строку, как в примере с Python ниже.
Я попытался сделать это на Python, и следующий код, кажется, работает как задумано:
import requests
import os
path = os.path.normpath('d:/BinaryData.bin.txt')
file = open(path, 'rb')
data = file.read()
r = requests.post("http://127.0.0.1:3000/api/v1/update_data", data=data)
Чего мне не хватает в Javascript, так как он не передает правильные данные из этого файла?
Пример того, как я пытался сделать это в javascript:
onFileSelected: function(evt) {
var file = evt.target.files[0];
var reader = new FileReader();
reader.onload = (function (file) {
return function(e) {
var data = e.target.result;
$.ajax({
url: "http://127.0.0.1:3000/api/v1/update_data",
data: data,
contentType: 'application/octet-stream',
processData: false,
type: "POST",
success: function () {
// all good
},
error: function() {
// failed
}
});
}
reader.readAsBinaryString(file);
}