+
80
-

js如何使用ajax上传二进制文件binary (application/octet-stream)的数据?

js如何使用ajax上传二进制文件binary (application/octet-stream)的数据?

请求路径:/upload/binary

请求方法:POST

消息格式:binary (application/octet-stream)

消息头:x-ext: 文件的后缀名,例如.jipg

直接在消息体中放置二进制数据

允许的后缀名:['.jpg',.jpeg',.bmp','.png']

网友回复

+
0
-

跟传统的mutipart上传文件不同,我们以后端php为例来演示一下:

html代码

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>XHR 上传文件示例</title>
</head>

<body>
  <input type="file" id="fileInput">
  <button id="uploadButton">上传</button>

  <script>
    const fileInput = document.getElementById('fileInput');
    const uploadButton = document.getElementById('uploadButton');

    uploadButton.addEventListener('click', () => {
      const file = fileInput.files[0];
      
      const xhr = new XMLHttpRequest();
      xhr.open('POST', 'upload.php');

      xhr.setRequestHeader('Content-Type', 'application/octet-stream');


xhr.setRequestHeader('X-File-Name', file.name);
      xhr.onload = () => {
        console.log('上传成功');
      };

      xhr.onerror = () => {
        console.log('上传失败');
      };

      xhr.send(file);
      return function(){
        xhr.abort();
     }

    });
  </script>
</body>
</html>

upload.php

<?php
// 获取原始的文件内容
$rawData = file_get_contents('php://input');

// 得到文件名
$fileName = $_SERVER['HTTP_X_FILE_NAME']; 


// 写入文件
$fp = fopen("/data/wwwroot/default/Data/{$fileName}", 'w');
fwrite($fp, $rawData); 
fclose($fp);

我知道答案,我要回答