50 lines
1.1 KiB
JavaScript
50 lines
1.1 KiB
JavaScript
import axios from "axios";
|
|
|
|
const UPLOAD_ENDPOINT = process.env.REACT_APP_OTA_SERVICE_URL;
|
|
const fileField = "file";
|
|
|
|
export const getCancelToken = () => {
|
|
const token = axios.CancelToken;
|
|
return token.source();
|
|
};
|
|
|
|
export const uploadFile = (data, token, onProgress, cancelToken) => {
|
|
const form = new FormData();
|
|
let options = {
|
|
method: "POST",
|
|
headers: {
|
|
"Content-Type": "multipart/form-data",
|
|
Authorization: `Bearer ${token}`,
|
|
},
|
|
cancelToken,
|
|
};
|
|
|
|
if (onProgress) {
|
|
options = {
|
|
...options,
|
|
onUploadProgress: (event) => {
|
|
onProgress(event.loaded / event.total);
|
|
},
|
|
};
|
|
}
|
|
|
|
for (let key in data) {
|
|
if (key !== fileField) form.append(key, data[key]);
|
|
}
|
|
|
|
form.append(fileField, data[fileField]);
|
|
|
|
return axios
|
|
.post(`${UPLOAD_ENDPOINT}/manifestfile`, form, options)
|
|
.then((response) => response.data)
|
|
.catch((error) => {
|
|
if (typeof error.response.data === "string") {
|
|
return {
|
|
error: error.response.statusText,
|
|
message: error.response.data,
|
|
};
|
|
}
|
|
return error.response.data;
|
|
});
|
|
};
|