ajax - 不使用表单数据将二进制数据从浏览器发布到 JFrog/Artifactory 服务器

标签 ajax image http fetch-api

所以我们在前端得到一个文件(一个图像文件)是这样的:

//html

  <input type="file" ng-change="onFileChange">

//javascript

  $scope.onFileChange = function (e) {
      e.preventDefault();
      let file = e.target.files[0];
      // I presume this is just a binary file
      // I want to HTTP Post this file to a server
      // without using form-data
   };

我想知道的是 - 有没有办法将此文件发布到服务器,而不将该文件作为表单数据包含在内?问题是我向其发送 HTTP POST 请求的服务器在收到请求时并不知道如何存储表单数据。

我相信这是正确的做法,但我不确定。

  fetch('www.example.net', { // Your POST endpoint
    method: 'POST',
    headers: {
      "Content-Type": "image/jpeg"
    },
    body: e.target.files[0] // the file
  })
   .then(
    response => response.json() // if the response is a JSON object
  )

最佳答案

您可以直接将文件附加到请求正文中。 Artifactory 不支持表单上传(和 it doesn't look like they plan to )

您仍然需要以某种方式代理请求以避免 CORS 问题,并且如果您使用的是用户凭据,则应谨慎对待它们。此外,您可以使用像 http-proxy-middleware 这样的库避免必须编写/测试/维护代理逻辑。

<input id="file-upload" type="file" />

<script>
function upload(data) {
  var file = document.getElementById('file-upload').files[0];
  var xhr = new XMLHttpRequest();
  xhr.open('PUT', 'https://example.com/artifactory-proxy-avoiding-cors');
  xhr.send(file);
}
</script>

关于ajax - 不使用表单数据将二进制数据从浏览器发布到 JFrog/Artifactory 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45179058/

相关文章:

javascript - php 中的 Json_encode 并在 jquery 中检索它

c# - 获取 Picturebox 中缩放图像的确切大小

java - 使用http协议(protocol)将用户数据发送到服务器

ruby-on-rails - rails : get values of http response

java - HttpUrlConnection Post 包含标题信息但没有正文

javascript - 使用 vue.js 和 axios 操作注入(inject)的 HTML

php - 轮询器中的 Laravel 和 AJAX 偶发 401 错误

php - 通过输入类型文件更新 blob 文件

javascript - 使用 jquery 和 ajax 在 div 中加载页面

c# - 删除(x);它会处理元素 x 吗?