### Uploading large files fails with an exception

I'm using axios.put together with raw data to be uploaded to a server which doesn't accept multipart/form data. This works fine as long as the data to be uploaded is smaller than 512 MB. As soon as I try to use larger packages the axios.put fails with the following exception:

Node:buffer:798

return this.utf8Slice(0, this.length);
^
Error: Cannot create a string longer than 0x1fffffe8 characters
at Buffer.toString (node:buffer:798:17)
at Object.isFormData (file:///mytest/node_modules/axios/lib/utils.js:195:42)
at Object.transformRequest (file:///mytest/node_modules/axios/lib/defaults/index.js:55:30)
at transform (file:///mytest/node_modules/axios/lib/core/transformData.js:22:15)
at Object.forEach (file:///mytest/node_modules/axios/lib/utils.js:251:10)
at Object.transformData (file:///mytest/node_modules/axios/lib/core/transformData.js:21:9)
at Axios.dispatchRequest (file:///mytest/node_modules/axios/lib/core/dispatchRequest.js:40:31)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5) {
code: 'ERR_STRING_TOO_LONG'

Why does axios try to interpret my request data as string even if Content-Type is set to "application/octet-stream"

### To Reproduce

      const buffer = fs.readFileSync(path);

      const config: AxiosRequestConfig = {
        url: url,
        method: options.method,
        headers: options.headers,
        data: buffer
      };

      const ax  = axios.create();
      ax.request(config).then(axiosResponse => {
        //do something with the response 
     })


### Code snippet

_No response_

### Expected behavior

_No response_

### Axios Version

1.3.5

### Adapter Version

_No response_

### Browser

_No response_

### Browser Version

_No response_

### Node.js Version

18.15.0

### OS

Windows 10 22H2

### Additional Library Versions

_No response_

### Additional context/Screenshots

_No response_
lib/utils.js
* @param {*} val The value to test
 *
 * @returns {boolean} True if value is a URLSearchParams object, otherwise false
 */
const isURLSearchParams = kindOfTest('URLSearchParams');
/**
 * Trim excess whitespace off the beginning and end of a string
 *
 * @param {String} str The String to trim
 *
 * @returns {String} The String freed of excess whitespace
 */
const trim = (str) => str.trim ?
  str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
/**
 * Iterate over an Array or an Object invoking a function for each item.
 *
 * If `obj` is an Array callback will be called passing
 * the value, index, and complete array for each item.
 *
 * If 'obj' is an Object callback will be called passing
 * the value, key, and complete object for each property.
 *
 * @param {Object|Array} obj The object to iterate
 * @param {Function} fn The callback to invoke for each item
 *
 * @param {Boolean} [allOwnKeys = false]
 * @returns {any}
 */
function forEach(obj, fn, {allOwnKeys = false} = {}) {