gpt4 book ai didi

php - 通过 XMLHttpRequest 将原始数据发送到 PHP

转载 作者:行者123 更新时间:2023-12-01 04:03:55 26 4
gpt4 key购买 nike

我正在选择一个文件并通过 XMLXttpRequest 发送它,如下所示:

var upload_form = $('#upload_form'),
file_input = $('#file_input'),
file_list = $('#file_list'),
submit_btn = $('#submit_btn'),
uploaders = [];

file_input.on('change', onFilesSelected);
upload_form.on('submit', onFormSubmit);


/**
* Loops through the selected files, displays their file name and size
* in the file list, and enables the submit button for uploading.
*/
function onFilesSelected(e) {
var files = e.target.files,
file,
list_item,
uploader;

for (var i = 0; i < files.length; i++) {
file = files[i];
uploader = new ChunkedUploader(file);
uploaders.push(uploader);
list_item = $('<li>' + file.name + '(' + file.size.formatBytes() + ') <button>Pause</button></li>').data('uploader', uploader);
file_list.append(list_item);
}

file_list.show();
submit_btn.attr('disabled', false);
}

因此,对于我添加的每个文件,我都会创建一个新的 ChunkedUploader 对象,该对象将文件分成 1MB 小文件。ChunkedUploader对象的代码如下:

function ChunkedUploader(file, options) {
if (!this instanceof ChunkedUploader) {
return new ChunkedUploader(file, options);
}

this.file = file;


this.options = $.extend({
url: 'index/upload'
}, options);

this.file_size = this.file.size;
this.chunk_size = (1024 * 100); // 100KB
this.range_start = 0;
this.range_end = this.chunk_size;

if ('mozSlice' in this.file) {
this.slice_method = 'mozSlice';
}
else if ('webkitSlice' in this.file) {
this.slice_method = 'webkitSlice';
}
else {
this.slice_method = 'slice';
}


this.upload_request = new XMLHttpRequest();
this.upload_request.onload = this._onChunkComplete();
}





_upload: function() {
var self = this,
chunk;

// Slight timeout needed here (File read / AJAX readystate conflict?)
setTimeout(function() {
// Prevent range overflow
if (self.range_end > self.file_size) {
self.range_end = self.file_size;
}

chunk = self.file[self.slice_method](self.range_start, self.range_end);

self.upload_request.open('POST', self.options.url, true);
self.upload_request.overrideMimeType('application/octet-stream');

if (self.range_start !== 0) {
self.upload_request.setRequestHeader('Content-Range', 'bytes ' + self.range_start + '-' + self.range_end + '/' + self.file_size);
}

self.upload_request.send(chunk);
}, 200);
},

一切正常,但在 PHP 端,我没有通过以下方式收到任何信息:$_GET$_POST$_FILE。我可以在 Firebug 中看到原始数据是通过 post 发送的,有一些乱码数据正在发送,我认为这是我刚刚从原始文件中裁剪下来的小块。我查遍了所有地方,但找不到任何与此案相关的内容。

你能指出我做错了什么吗,因为我不知道。

最佳答案

您可能需要使用 file_get_contents('php://input') 来代替:这是原始请求正文,而 $_POST 已经是解析后的表示形式。

参见http://php.net/manual/en/wrappers.php.php#wrappers.php.input

关于php - 通过 XMLHttpRequest 将原始数据发送到 PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33763312/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com