空空空空空空空空空空空空如也 2024-11-07 18:40 采纳率: 0%
浏览 7

formdata上传文件时遇到正斜杠被优化掉的问题

nodejsV12.x
axios^1.7.7
formdata^4.0.0
上传数据时候斜杠被优化掉
比如这个代码:
formData.append("myfile[]",fs.createReadStream(filename,'binary'), r"////firmw////pa0re.bin");

r"////firmw////pa0re.bin"得到的结果是pa0re.bin

初学JavaScript,不知道如何处理这个问题,有知道的大师请指导下

  • 写回答

1条回答 默认 最新

  • 越重天 新星创作者: Java技术领域 2024-11-08 22:33
    关注

    本答案参考 多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢

    1. 问题分析
      • 在使用FormData上传文件时,你遇到了路径中的斜杠被优化掉的情况。这可能是由于FormData在处理数据时对某些特殊字符或格式的默认处理方式导致的。
      • 在JavaScript中,特别是在node.js环境下,文件路径的处理需要遵循一定的规则,以确保数据的完整性。
    2. 可能的解决方案
      • 使用原始字符串的正确方式
        • 在JavaScript中,原始字符串(以r开头)主要用于正则表达式中避免转义字符的额外处理。在这里使用r可能不是正确的方式。你可以直接使用普通字符串来表示文件路径。
        • 例如,将r"////firmw////pa0re.bin"改为"/firmw/pa0re.bin"
      • 检查fs.createReadStream的参数
        • 对于fs.createReadStream方法,第二个参数'binary'在较新版本的node.js中可能不是正确的用法。在node.js 12.x中,你可以直接使用fs.createReadStream(filename)而不传递'binary'(因为node.js默认以utf - 8编码读取文件内容,对于读取文件流来说不需要指定'binary'这种模式)。
      • 处理FormData中的文件名
        • FormData.append方法在处理文件名时可能会有一些默认的解析行为。你可以尝试将文件路径和文件名分开处理,然后在FormData中明确指定文件名。
        • 以下是一个修改后的示例代码:
    const axios = require('axios');
    const fs = require('fs');
    const FormData = require('form - data');
    
    const formData = new FormData();
    const filename = '/firmw/pa0re.bin';
    const readStream = fs.createReadStream(filename);
    
    // 明确指定文件名
    formData.append('myfile[]', readStream, {
        filepath: filename,
        filename: 'pa0re.bin'
    });
    
    axios.post('your - upload - url', formData, {
        headers: formData.getHeaders()
    })
    .then(response => {
        console.log('上传成功', response.data);
    })
    .catch(error => {
        console.log('上传失败', error);
    });
    
    1. 总结
      • 在处理FormData上传文件时,要注意文件路径、读取文件流的方式以及FormData中数据的组织方式。正确处理这些方面可以避免出现字符被意外优化或处理不当的情况。同时,要遵循node.js和相关库(如axiosFormData等)的最佳实践。
    评论

报告相同问题?

问题事件

  • 创建了问题 11月7日