javascript - ReactJS 多文件上传和 axios post : Uncaught (in promise) SyntaxError:

标签 javascript reactjs

在我的 ReactJS 应用程序中,用户可以上传多个图像,这些图像被保存到文件系统,然后我从数据库中获取它们的链接(我事先将它们保存到数据库中)。只要用户只上传一张图片,这种方法就可以正常工作,但我需要能够同时上传大量图片。

当我这样做时,我总是会收到以下错误:

Uncaught (in promise) SyntaxError: Unexpected token P in JSON at position 0
    at Main.js:278
    at <anonymous>

这是我发布/获取数据的方式:

handleUpload (event) {
    var _this = this;
    var files = event.target.files;

    const data = new FormData();

    for (var i=0; i<files.length; i++) {
        data.append("icons", files[i]);  
    }

    axios.post('/newicons', data)
    .then(function (response) {
            console.log(response);
            _this.props.handleUpload()
        })
        .catch(function (error) {
            console.log(error);
        });
}

handleUpload() {
    fetch('/icons')
        .then(res => res.json())
        .then(icons => this.setState({icons}))
}

我也试过使用 promises,像这样:

addIcons (event) {
  var _this = this;
  var files = event.target.files;

    const data = new FormData();

    for (var i=0; i<files.length; i++) {
        data.append("icons", files[i]);  
    }

    axios.post('/newicons', data)
    .then(function (response) {
            console.log(response);
            _this.props.handleUpload()
        })
        .catch(function (error) {
            console.log(error);
        });
}

handleIconUpload (event) {
    return Promise.all([this.addIcons(event)])
        .then(this.props.handleUpload())
        .catch(err => console.log('There was an error:' + err))
}

但这给了我这个错误:

 Unhandled Rejection (SyntaxError): Unexpected token P in JSON at position 0 (anonymous function)
 275 | 
 276 | handleUpload() {
 277 |  fetch('/fetchicons')
 > 278 |        .then(res => res.json())
 279 |      .then(fetchedicons => this.setState({fetchedicons}, () => 
this.setIcons()))
 280 | }`

我不太确定如何解决这个问题。

当用户打开页面时,我想获取已经上传的图片。一旦用户上传了更多图片,我想更新网站上显示的图片。

据我了解,上面的代码(不是 promise 的代码)发布图片,一旦成功,它会调用 this.props.handleUpload() 并再次获取图片,所以我真的不明白为什么它不能处理多个图像。

我想知道的是: 我在尝试解决此问题时做错了什么以及如何解决它?

编辑:这是我的/newicons-route:

const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        cb(null, "./client/src/icons");
    },

    filename: (req, file, cb) => {
        const newFilename = `${uuidv4()}${path.extname(file.originalname)}`;
        cb(null, newFilename);
    },
})

const upload = multer({ storage: storage });

router.post("/", upload.array('iconupload'), (req,res) => {
    for (var i=0; i<req.files.length; i++) {
        var newIcon = new Icons();
        newIcon.icons = req.files[i].path;
        newIcon.save(function (err) {
        if(err)
            res.send(err);
        res.send("Entry added successfully!");
    });
    }

    console.log(filelist);
});

最佳答案

您在图像数组中迭代时发送服务器响应,您必须将发送移到循环之外:

router.post("/", upload.array('iconupload'), (req,res) => {
    try {
       req.files.forEach((image) => {
           var newIcon = new Icons();
           newIcon.icons = image.path;
           newIcon.save(function (err) {
              if(err) throw err;
           });
       });
       res.send("Entry added successfully!");
    } catch (e) {
       res.send(e)
    }
});

关于javascript - ReactJS 多文件上传和 axios post : Uncaught (in promise) SyntaxError:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663584/

相关文章:

javascript - 在 xp :table control 上启动数据表

javascript - 通过span标签动态包装js字符串,这可能会在React中危险地呈现

javascript - 如何在 React Native 中使用 switch 进行条件渲染?

javascript - Facebook Javascript SDK Audience Network 错误 1003

php - php中 session 变量中的输入字段值

javascript - HtmlAudioElement 音频时间延迟

javascript - 重新应用运行示例厨房水槽应用程序时出错

javascript - ReactJS:表单 onSubmit 无法调用回调

javascript - 为什么当我解构属性时接收 props 的组件不工作,但当我使用 props.key 时它工作?

javascript - 添加事件监听错误