我正在使用rn-获取-blob库下载文件并将其保存到设备中,并且我成功地使用了GET请求(如:.fetch('GET', "http://api.pdflayer.com/api/convert?access_key=MY_ACCESS_KEY&document_url=URL_PATH") ),但是我使用的API只接受post请求,所以我尝试了这一点,但没有成功:
const { config, fs } = RNFetchBlob;
let DownloadDir = fs.dirs.DownloadDir;
let options = {
fileCache: true,
addAndroidDownloads : {
useDownloadManager : true,
path: DownloadDir + "/file.pdf"
}
};
const data = JSON.stringify({
access_key: "MY_ACCESS_KEY",
document_url: "https://pdflayer.com/downloads/invoice.html"
});
config(options)
.fetch('POST', 'http://api.pdflayer.com/api/convert', {body: data})
.then((res) => {
console.log(res);
})
.catch((err) => {
console.log(err)
})如果我没有正确发送我的请求,那我该怎么做呢?提前谢谢。
发布于 2019-03-23 11:17:36
根据rn-fetch-blob的文档:
Headers : HTTP请求的对象(可选)标头,标题的值应该是串的,如果你上传二进制文件,内容类型应该是应用程序/八进制流或多部分/表单-数据(见上面的例子)。 正文: HTTP的String2000Array(可选)主体,正文可以是BASE64字符串,也可以是包含对象元素的数组,每个元素都有两个必需的属性名称、数据和可选属性文件名,一旦设置了文件名,数据属性中的内容将被视为文件或BASE64字符串的路径,该文件或BASE64字符串将在稍后被转换为字节数组。
我认为您应该为请求定义内容类型,并修改代码,如下所示:
// Post binary data using base64 encoding
RNFetchBlob.fetch('POST', 'http://myupload.com/upload', {
'Content-Type' : 'application/octet-stream'
}, RNFetchBlob.base64.encode(mydata))
// Post binary data from existing file
RNFetchBlob.fetch('POST', 'http://myupload.com/upload', {
'Content-Type' : 'application/octet-stream'
}, RNFetchBlob.wrap(path_to_the_file))
// Post form data
RNFetchBlob.fetch('POST', 'http://myupload.com/upload', {
'Content-Type' : 'multipart/form-data'
}, [
{ name : 'user_name', data : 'Bill' },
// binary field data from a file path, use `wrap` method to wrap the path
{ name : 'avatar', filename : 'avatar.jpg', data : RNFetchBlob.wrap(path_to_the_file) },
// binary field data encoded in BASE64
{ name : 'pet-avatar', filename : 'pet-avatar.jpg', data : RNFetchBlob.base64.encode(image_data) },
])我希望这有帮助:)
https://stackoverflow.com/questions/55312896
复制相似问题