axios API 在文件准备好后调用
axios API call after file is ready
我正在尝试将文件上传到服务器。
const uploadFileCall = (file) => {
const formData = new FileReader();
formData.readAsArrayBuffer(file);
return axios({
method: 'post',
url: `file/${file.name}`,
data: {
fileContent: formData.result,
},
});
};
如何等待调用 api 直到 formData 准备好?我应该使用回调还是创建一个新的承诺来等待准备好的文件?
您可以使用 FileReader API 使用 onload() 方法处理它
看看这个link文档很清楚。您应该能够使用此示例调整您的代码。
您必须从 axios 号召性用语中回拨。
//post Call
function postCall(url, data, callbackProgressUpload = null) {
Date.prototype.toJSON = function () {
return moment(this).format();
}
const requestOptions = {
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
onUploadProgress: function (progressEvent) {
// var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total );
if (callbackProgressUpload)
callbackProgressUpload(progressEvent);
}
};
return axios.post(baseUrl + url, data, requestOptions).then(
response => {
return response;
}
).catch(function (error) {
return Promise.reject(error);
});
}
*************************************
//service Call
function storeFiles(imagesData, orderId, folder, callback) {
return SC.postCall(`${url}`, fileData, (response) => {
callback(response);
}
);
}
********************************
//action
export function storeFiles(imagesData, orderId, folder) {
return dispatch => {
return orderService.storeFiles(imagesData, orderId, folder, (progress) => {
var percentCompleted = Math.round((progress.loaded * 100) / progress.total);
console.log('percentCompleted', percentCompleted)
}).then(
response => {
return response;
},
error => {
return Promise.reject(error);
}
)
}
}
我正在尝试将文件上传到服务器。
const uploadFileCall = (file) => {
const formData = new FileReader();
formData.readAsArrayBuffer(file);
return axios({
method: 'post',
url: `file/${file.name}`,
data: {
fileContent: formData.result,
},
});
};
如何等待调用 api 直到 formData 准备好?我应该使用回调还是创建一个新的承诺来等待准备好的文件?
您可以使用 FileReader API 使用 onload() 方法处理它
看看这个link文档很清楚。您应该能够使用此示例调整您的代码。
您必须从 axios 号召性用语中回拨。
//post Call
function postCall(url, data, callbackProgressUpload = null) {
Date.prototype.toJSON = function () {
return moment(this).format();
}
const requestOptions = {
method: 'POST',
headers: authHeader(),
body: JSON.stringify(data),
onUploadProgress: function (progressEvent) {
// var percentCompleted = Math.round( (progressEvent.loaded * 100) / progressEvent.total );
if (callbackProgressUpload)
callbackProgressUpload(progressEvent);
}
};
return axios.post(baseUrl + url, data, requestOptions).then(
response => {
return response;
}
).catch(function (error) {
return Promise.reject(error);
});
}
*************************************
//service Call
function storeFiles(imagesData, orderId, folder, callback) {
return SC.postCall(`${url}`, fileData, (response) => {
callback(response);
}
);
}
********************************
//action
export function storeFiles(imagesData, orderId, folder) {
return dispatch => {
return orderService.storeFiles(imagesData, orderId, folder, (progress) => {
var percentCompleted = Math.round((progress.loaded * 100) / progress.total);
console.log('percentCompleted', percentCompleted)
}).then(
response => {
return response;
},
error => {
return Promise.reject(error);
}
)
}
}