uploadBlob with HTTP PUT corrupted
Describe the bug I'm replacing react-native-fetch-blob with this library. This library seems to force form-data when using the uploadBlob API. This results in a corrupted upload. (upload is to google cloud storage)
To Reproduce const request = { absoluteFilePath: filePath, method: 'PUT', mimeType: mimeType || 'application/octet-stream', url, onProgressWrap, progressIntervalMilliseconds: 250, };
const res = await BlobCourier.uploadBlob(request);
Expected behavior File is uploaded correctly.
Actual behavior
The headers end up inside the uploaded file:
Screenshots
I opened the binary png file, in a text editor , as you can see its corrupt and the headers are in the uploaded file.
Desktop (please complete the following information):
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
Smartphone (please complete the following information):
- Device: [e.g. iPhone6]
- OS: [e.g. iOS8.1]
- Browser [e.g. stock browser, safari]
- Version [e.g. 22]
Additional context Add any other context about the problem here.
Hi @giantslogik thank you for reporting this problem, I'll try to take a closer look this weekend!
@edeckers I believe google cloud storage and other PUT based uploads, should not be using form data. I replaced the blob-courier code with the following:
const localFile = await fetch(filePath);
const blob = await localFile.blob();
var xhr = new XMLHttpRequest();
xhr.open('PUT', url, true);
xhr.onload = function () {
if (xhr.status >= 200 && xhr.status < 300) {
....
} else {
....
}
};
xhr.onerror = function () {
...
};
xhr.upload.onprogress = function () {
...
};
xhr.setRequestHeader('Accept', 'application/json');
xhr.setRequestHeader('Content-Type', mimeType || 'application/octet-stream');
xhr.send(blob);