new Vue() 2023-05-08 15:10 采纳率: 0%
浏览 26

关于#uniapp IOS 文件上传 status == 0 #的问题,如何解决?

uniapp webview h5页面文件上传 安卓端上传文件正常 ios端异常
安卓端是 xhr.status == 200 但是ios端是 xhr.status == 0 导致报错 但是后台还可以存进去(每次都是status是0 但是不是每一次都能存入到数据库) 就很疑惑,找了好久没有找到答案,看过 uniapp的一个插件 lsj-upload 但是我看他底层是这种的ajax请求 估计也是一样的

代码片


    xhr.open('POST', uploadUrl);
    xhr.upload.addEventListener("progress", function(event) {
       if (event.lengthComputable) {
          let percent = Math.ceil(event.loaded * 100 / event.total) ;
          //实时监听文件上传的进度
        if(isUniJsReady){
            uni.postMessage({
                data: {
                    progress: percent+ "%",
                    message: "上传中"
                }
            });
        }else{
            title.innerText = "上传";
        }
                    
    }
}, false);
    xhr.send(formData);
    xhr.onreadystatechange = function() {
    if (xhr.readyState == 4 && xhr.status == 200) {
        let responseText = xhr.responseText;
        let successful = false;
        if(JSON.parse(responseText).code == 0){
            responseText = "上传成功";
            successful = true;
    }
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-05-09 09:01
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt:

      这个问题可能是由于 iOS 的安全机制导致的。由于 iOS 在应用的 webview 中默认没有开启跨域访问权限,如果需要上传文件到跨域域名下,需要在应用的 info.plist 文件中添加配置,以开启跨域访问权限。

      具体操作步骤如下:

      1. 打开 Xcode,找到你的应用项目。
      2. 在项目目录下找到 info.plist 文件,双击打开。
      3. 在 info.plist 文件中添加以下配置(如果已存在则跳过):
      <key>NSAppTransportSecurity</key>
      <dict>
          <key>NSAllowsArbitraryLoads</key>
          <true/>
      </dict>
      
      1. 保存并关闭 info.plist 文件。
      2. 在 Xcode 中重新编译应用。
      3. 尝试在 iOS 端上传文件,查看是否能够成功上传。

      如果以上方法仍然不能解决问题,可能需要进一步排查代码中可能存在的问题。可以先尝试手动调用 XMLHttpRequest 对象进行文件上传,以确认问题是否出现在 uniapp 的封装上。代码示例如下:

      const xhr = new XMLHttpRequest();
      const formData = new FormData();
      formData.append('file', file);
      
      xhr.upload.addEventListener('progress', (event) => {
        // 进度回调
      });
      
      xhr.upload.addEventListener('load', () => {
        // 上传完成回调
      });
      
      xhr.upload.addEventListener('error', () => {
        // 上传错误回调
      });
      
      xhr.open('POST', 'https://your.upload.url');
      xhr.send(formData);
      

      如果手动调用仍然出现状态码为 0 的问题,那可能是服务器端响应存在问题,另行排查服务器端代码和配置。

      如果手动调用可以正常上传,那可能是 uniapp 的封装存在问题。可以考虑优化封装或者使用其他文件上传插件解决问题。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 5月8日

悬赏问题

  • ¥60 QQOP数据,什么是op数据号,怎么提取op数据!能不能大量提取(语言-c语言)
  • ¥15 matlab代码 关于微分方程和嵌套的分段函数。
  • ¥15 把VMware项目复制到另一台电脑
  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密