Я пытаюсь отправить файл изображения на внутренний сервер с помощью запроса PUT.
HTML:
<input type="file" name="myFile" id="profilePicInput">
Javacript:
const profileInput = document.getElementById('profilePicInput');
profileInput.addEventListener("change", handleFiles, false);
function handleFiles(){
const formData = profileInput.files[0];
$.ajax({
url: '../uploadImage', //my servlet url
type: 'PUT',
processData: false,
contentType: false,
data: {
data: formData
},
success: function () {
console.log("profile pic updated!");
}
});
}
ПроблемаЯ сталкиваюсь с тем, что в своем бэкэнд-коде я получаю данные с типом содержимого «text / plain; charset = UTF-8», но мне нужно «multipart / form-data».
Я пробовал две вещи, которые не работали:
Использование HTML-форм
<form id="profilePicForm" action="javascript:handleFiles()" method="post" enctype="multipart/form-data">
<input type="file" name="myFile" id="profilePicInput">
</form>
Javascript:
const profileInput = document.getElementById('profilePicInput');
profileInput.addEventListener("change", submitForm, false);
function submitForm(){
document.getElementById("profilePicForm").submit();
}
Но все же тип содержимого в заголовке запроса говорит «text / plain; charset = UTF-8» в моем запросе PUT.
Использование FormData
function handleFiles(){
const blobFile = profileInput.files[0];
let formData = new FormData();
formData.append("fileToUpload", blobFile);
$.ajax({
url: '../uploadImage', //my servlet url
type: 'PUT',
processData: false,
contentType: false,
data: {
data: formData
},
success: function () {
console.log("profile pic updated!");
}
});
}
Та же проблема.Тип содержимого в заголовке запроса все еще говорит 'text / plain; charset = UTF-8' в моем запросе PUT.
Поэтому мой вопрос: как вы отправляете файл сcontent-type = multipart / form-data через запрос PUT?
ОБНОВЛЕНИЕ :
Решение:
HTML:
<input type="file" name="myFile" id="profilePicInput">
Javascript:
const profileInput = document.getElementById('profilePicInput');
profileInput.addEventListener("change", handleFiles, false);
function handleFiles(){
let formData = new FormData();
formData.append("fileToUpload", profileInput.files[0]);
const xhr = new XMLHttpRequest();
xhr.open('PUT', '../uploadImage');
xhr.onload = () => {
console.log("profile updated");
};
xhr.send(formData);
}