javascript - React/Node 文件在 Safari 中上传失败

标签 javascript reactjs safari

最近在尝试在 Safari 中上传文件时发现了一个问题。我在 macOS 10.12.3 上的 Safari 10.0.3 中遇到了与 iOS 10.3.1 上的移动 Safari 中相同的问题。此代码在 Google Chrome 和 IE 中都能完美运行,但在 Safari 中会无限期挂起。

还值得注意的是:当没有附加文件时,FormData 在 Safari 中成功发布。

这是我的 JSX/HTML:

<Button bsStyle="primary" onClick={() => this.refs.selectFiles.click()}>
   Browse <input style={{ display: 'none' }} ref="selectFiles" type="file" onChange={this.handleAttachments} accept=".jpg,.jpeg,.png,.gif,.apng,.tiff,.tif,.bmp,.pdf,.xcf" multiple />
</Button>

这是我的客户端网络代码:

export function createAction(action, files) {
const data = new FormData();
for (var prop in action) {
  data.append(prop, action[prop]);
}
if (files) {
  for (let i = 0; i < files.length; i++) {
    data.append(files[i].name, files[i]);
  }
}

return fetch('api/actions', {
  credentials: 'include',
  headers: { 'Accept': 'application/json', "Content-Type": "multipart/form-data" },
  method: 'post',
  body: data
});
}

以下是服务器上处理文件的方式:

function insertActionAndComment(req, res) {
  if (req.files) {
  funcs = req.files.map(file => {
    return db.proc('dbo.InsertAttachment', request => {
      request.addParameter('ID', TYPES.NVarChar, id);
      request.addParameter('Name', TYPES.NVarChar, file.fieldname);
      request.addParameter('File', TYPES.VarBinary, file.buffer);
    });
  });
  }
  //Other processing code

  Promise.all(funcs)
    .then(() => {
  //Send notification email, etc

  res.status(201);
  res.end();
  })
  .catch(error => {
    console.error(error);
  });
}

router.route('/')
.post(upload.any(), insertActionAndComment)

我发现 imgur 在其 Safari 移动网站中完美地实现了此功能。

以下是其网站上 POST 中图像的 FormData 示例:

------WebKitFormBoundaryvnoeYeAi7QAdnoE1
Content-Disposition: form-data; name="image"; filename="image.jpg"
Content-Type: image/jpeg


------WebKitFormBoundaryvnoeYeAi7QAdnoE1--

这是我的文件“POST”中的 FormData 示例:

------WebKitFormBoundaryobH1qsBmUuSGQHiX
Content-Disposition: form-data; name="Screen Shot 2017-04-11 at 4.16.54 
PM.png"; filename="Screen Shot 2017-04-11 at 4.16.54 PM.png"
Content-Type: image/png


------WebKitFormBoundaryobH1qsBmUuSGQHiX--

最佳答案

经过大量研究,我发现 Safari 不能很好地支持 Windows 身份验证,这就是我的问题的原因。

如果可以,请转到 IIS 管理器并从 Windows 身份验证切换到基本身份验证,文件应该会成功上传。

关于javascript - React/Node 文件在 Safari 中上传失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43395548/

相关文章:

javascript - 将一个数组与另一个数组排序最有效

javascript - React-native 将图像保存为状态不起作用

javascript - 如何将 Kaggle 数据集添加到 elasticsearch 中?

javascript - setState 映射函数中对象的一种状态

javascript - 移动设备上的弹出 div 不在屏幕中间

javascript - 监视 Jasmine 中另一个函数调用的函数

javascript - jQuery:将图像设置为来自 Post 请求的数据

javascript - 如何在渲染方法执行之前通过 Promise 为状态赋值

ios - Service Worker FechtEvent.respondWith 响应在 iOS 12.1 Safari 上为空

javascript - <audio> 元素在 Safari 中根本不起作用