axios MERN+ Cloudinary:不支持的源URL

o2gm4chl  于 2023-08-04  发布在  iOS
关注(0)|答案(3)|浏览(99)

我正在尝试上传文件到cloudinary。这是我的react组件的一部分

...
addItem() {
    ...
    let file = this.fileInput.value;
    keywords !== "" && this.props.onAddItem(keywords, place, image);
    ...
  }
  render() {
    return (
      ....
      <Input
      type="file"
      innerRef={(input) => {this.fileInput = input}}
      name="image"
      id="image"
      placeholder=""/>
    )
  }

字符串
下面是动作文件

export function onAddItem(keywords, place, file, id, isChangebale = false) {
  return (dispatch) => {
    axios.all([
      axios.post('https://api.cloudinary.com/v1_1/myservername/image/upload',
        {upload_preset: "mypresetname", file: file}),
      axios.post('http://localhost:3001/api/items/', { keywords, place, id, isChangebale })
    ])
    .then(axios.spread((cloudinaryRes, localRes) => {
      console.log(cloudinaryRes, localRes);
    }))


我收到错误xhr.js:178 POST https://api.cloudinary.com/v1_1/testovich/image/upload 400 (Bad Request)和响应头"X-Cld-Error: Unsupported source URL: C:\fakepath\2017-12-07_19-06-445.png"
当我使用postman测试时,我得到了正确的响应。
x1c 0d1x的数据
所以看起来我在把文件从rect组件传递到动作文件时做错了什么。如何将正确的路径/文件传递到cloudinary?

af7jpaap

af7jpaap1#

有两个错误:1.在React组分中应有

let file = this.fileInput.files[0];//I upload only one file

字符串
代替了

let file = this.fileInput.value;


1.在行动文件
const formData = new FormData(); formData.append(“file”,image); formData.append(“upload_preset”,“mypresetname”);
return(dispatch)=> { axios.all([ // AJAX upload request using Axios)axios.post(' https://api.cloudinary.com/v1_1/myservername/image/upload ',formData,
而不是:

export function onAddItem(keywords, place, file, id, isChangebale = false) {
  return (dispatch) => {
    axios.all([
      axios.post('https://api.cloudinary.com/v1_1/myservername/image/upload',
        {upload_preset: "mypresetname", file: file}),

snz8szmq

snz8szmq2#

将图像转换为base64,如const base64Img = data:image/jpg;base64,${file.data};file.data表示图像拾取器响应的数据属性。然后我将base64Img传递给像return RNFetchBlob.fetch('POST', apiUrl, headerProps, [ { name: 'file', fileName: file.fileName, type: file.type, data: base64Img } ]);这样的数据,希望它能有所帮助。

x6h2sr28

x6h2sr283#

我使用了formik和React,也遇到了同样的问题。我试图上传一个单一的图像后,做我的研究,我意识到可能有2个可能的原因,这个错误
1.传递给formData的值必须是单个File Object。
const upload=(file)=>{ const data = new FormData(); data. Append('file ',file)data.append'cloud_name',<cloud_name>)data.append('upload_preset',<cloud_preset>)fetch('https://api.cloudinary.com/v1_1//image/upload',{method:'post ',body:data,mode:'cors '}).then(res=> res.json()).then(data=>{ console.log(data)})
这里的文件应该从e.target.files[0]中获取,提供正确的索引

<input type="file" name="file"  onChange={(e)=>{setFieldValue('image',e.target.files[0])}}/>

字符串
1.如果错误仍然存在,请解构从窗体接收的文件值。

onSubmit:(file)=>{ 
    const {image}= file

    upload(image)
}

相关问题