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

Javascript 如何使用rn fetch blob发送POST请求以下载文件?,javascript,react-native,fetch,Javascript,React Native,Fetch,我正在使用library下载一个文件并将其保存到设备中,我已经成功地使用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.Do

我正在使用library下载一个文件并将其保存到设备中,我已经成功地使用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)
    })

如果我没有正确发送请求,那么我应该怎么做?提前感谢。

根据rn fetch blob的文档:

headers:HTTP请求的对象(可选)头,值为 如果您正在上载二进制文件,则应将标题字符串化, 内容类型应为应用程序/八位字节流或 多部分/表单数据(参见上面的示例)

正文: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) },
    ])

我希望这有帮助:)

根据rn fetch blob的文档:

headers:HTTP请求的对象(可选)头,值为 如果您正在上载二进制文件,则应将标题字符串化, 内容类型应为应用程序/八位字节流或 多部分/表单数据(参见上面的示例)

正文: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) },
    ])

我希望这能有所帮助:)

@BlueTurtle将您的内容类型更改为“multipart/form data”,我这样做了,但没有任何更改!,我已经在postman中测试了这个API,我可以发送一个具有完全相同数据的post请求并获取一个文件,我确信我的请求有问题。你知道有什么替代库可以满足我的需要吗?@BlueTurtle也许你的问题与其他问题有关,但是,你可以使用XMLHttpRequest,改为飞盘或axios库。@BlueTurtle将您的内容类型更改为“multipart/form data”,我做了,但没有任何更改!,我已经在postman中测试了这个API,我可以发送一个具有完全相同数据的post请求并获取一个文件,我确信我的请求有问题。你知道有什么替代库可以满足我的需要吗?@BlueTurtle也许你的问题与其他问题有关,但是,你可以使用XMLHttpRequest,而不是飞盘或axios图书馆。