如何使用rn-fetch-blob发送POST请求以下载文件?

时间:2019-03-23 10:46:18

标签: javascript react-native fetch

我正在使用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)
    })

如果我没有正确发送请求,那么该怎么办?预先感谢。

1 个答案:

答案 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) },
    ])

我希望能对您有所帮助:)