我正在使用rn-fetch-blob库来下载文件并将其保存到设备中,并且已经成功完成了与.fetch('GET', "http://api.pdflayer.com/api/convert?access_key=MY_ACCESS_KEY&document_url=URL_PATH")
之类的GET请求,但是我使用的API只是接受发布请求,因此我尝试了此操作但没有成功:
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)
})
如果我没有正确发送请求,那么该怎么办?预先感谢。
答案 0 :(得分:1)
根据rn-fetch-blob的文档:
headers:object(可选)HTTP请求的标题,其值 标头应为字符串,如果您要上传二进制文件, 内容类型应为application / octet-stream或 multipart / form-data(请参见上面的示例)。
body:string | HTTP请求的数组(可选)正文,正文 可以是BASE64字符串,也可以是包含对象元素的数组, 每个元素都有2个必需的属性名称,数据和可选的 属性文件名,设置文件名后,数据属性中的内容将 被视为文件或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) },
])
我希望能对您有所帮助:)