new Request()কনস্ট্রাক্টরকে ব্যবহার করে তারপরে Request.bodyUsed Booleanঅ্যাট্রিবিউটটি পরীক্ষা করা সম্ভব সম্ভাব্য কাজ হতে পারে
bodyUsedঅ্যাট্রিবিউট এর সংগ্রহকারী যদি সত্যি ফিরে আসবে disturbedঅন্যথায়, এবং মিথ্যা।
স্ট্রিম কিনা তা নির্ধারণ করা distributed
Bodyমিক্সিন প্রয়োগকারী একটি বস্তু বলা হয় disturbedযদি
bodyএটি নন এবং নল streamহয় disturbed।
সমান হলে এর পুনরাবৃত্ত কলটিতে শৃঙ্খলযুক্ত fetch() Promiseথেকে ফিরে আসুন ।.then().read()ReadableStreamRequest.bodyUsedtrue
দ্রষ্টব্য, Request.bodyবাইটগুলি শেষ বিন্দুতে প্রবাহিত হওয়ায় পদ্ধতির বাইটগুলি পড়া হয় না । এছাড়াও, ব্রাউজারে কোনও প্রতিক্রিয়া পূর্ণরূপে ফেরার আগে আপলোডটি ভালভাবে সম্পূর্ণ হতে পারে।
const [input, progress, label] = [
document.querySelector("input")
, document.querySelector("progress")
, document.querySelector("label")
];
const url = "/path/to/server/";
input.onmousedown = () => {
label.innerHTML = "";
progress.value = "0"
};
input.onchange = (event) => {
const file = event.target.files[0];
const filename = file.name;
progress.max = file.size;
const request = new Request(url, {
method: "POST",
body: file,
cache: "no-store"
});
const upload = settings => fetch(settings);
const uploadProgress = new ReadableStream({
start(controller) {
console.log("starting upload, request.bodyUsed:", request.bodyUsed);
controller.enqueue(request.bodyUsed);
},
pull(controller) {
if (request.bodyUsed) {
controller.close();
}
controller.enqueue(request.bodyUsed);
console.log("pull, request.bodyUsed:", request.bodyUsed);
},
cancel(reason) {
console.log(reason);
}
});
const [fileUpload, reader] = [
upload(request)
.catch(e => {
reader.cancel();
throw e
})
, uploadProgress.getReader()
];
const processUploadRequest = ({value, done}) => {
if (value || done) {
console.log("upload complete, request.bodyUsed:", request.bodyUsed);
return reader.closed.then(() => fileUpload);
}
console.log("upload progress:", value);
progress.value = +progress.value + 1;
return reader.read().then(result => processUploadRequest(result));
};
reader.read().then(({value, done}) => processUploadRequest({value,done}))
.then(response => response.text())
.then(text => {
console.log("response:", text);
progress.value = progress.max;
input.value = "";
})
.catch(err => console.log("upload error:", err));
}