Php Ajax:在不发送实际文件的情况下发送文件信息 我正在编写一个代替C++程序的Web应用程序。应用程序的目标是从浏览器添加或拍摄照片,然后将其上载到服务器

Php Ajax:在不发送实际文件的情况下发送文件信息 我正在编写一个代替C++程序的Web应用程序。应用程序的目标是从浏览器添加或拍摄照片,然后将其上载到服务器,php,ajax,file-upload,Php,Ajax,File Upload,上载文件有两个主要步骤,检查服务器上是否已存在文件,如果不存在,则上载文件 我想知道在没有实际文件内容的情况下,如何在Ajax中迈出第一步(发送文件(PHP脚本使用的是$\u文件,我无法更改) < C++代码看起来是这样的: *dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n"); *dataBuffer_ += QByteArray("content-disposition:

上载文件有两个主要步骤,检查服务器上是否已存在文件,如果不存在,则上载文件

我想知道在没有实际文件内容的情况下,如何在Ajax中迈出第一步(发送文件(PHP脚本使用的是$\u文件,我无法更改)

< C++代码看起来是这样的:

*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"expected_size\"\r\n\r\n");
*dataBuffer_ += fileSize.toAscii() + QByteArray("\r\n");

//original size
//Original size of the file before compression and encoding
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"original_size\"\r\n\r\n");
*dataBuffer_ += QString::number(file.size()).toAscii() + QByteArray("\r\n");

//tell upload.php that we have a file to upload
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"mode\"\r\n\r\n");
*dataBuffer_ += QByteArray("check_file\r\n");

//the binary
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"file\"; filename=\"") + file.fileName().toAscii() + QByteArray("\"\r\n");
*dataBuffer_ += QByteArray("content-type: application/zip\r\n\r\n");
*dataBuffer_ += fileBuffer;  
*dataBuffer_ += QByteArray("\r\n");

*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("--");
var form = new FormData();
form.append("expected_size", expected_size);
form.append("original_size", original_size);
form.append("mode", "check_file");
form.append("file", fileInput.files[0]);

var xhr = new XMLHttpRequest();
xhr.open('POST', action, true);
xhr.send(formData);
我想这样做:

*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"expected_size\"\r\n\r\n");
*dataBuffer_ += fileSize.toAscii() + QByteArray("\r\n");

//original size
//Original size of the file before compression and encoding
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"original_size\"\r\n\r\n");
*dataBuffer_ += QString::number(file.size()).toAscii() + QByteArray("\r\n");

//tell upload.php that we have a file to upload
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"mode\"\r\n\r\n");
*dataBuffer_ += QByteArray("check_file\r\n");

//the binary
*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("\r\n");
*dataBuffer_ += QByteArray("content-disposition: form-data; name=\"file\"; filename=\"") + file.fileName().toAscii() + QByteArray("\"\r\n");
*dataBuffer_ += QByteArray("content-type: application/zip\r\n\r\n");
*dataBuffer_ += fileBuffer;  
*dataBuffer_ += QByteArray("\r\n");

*dataBuffer_ += QByteArray("--") + QByteArray(MULTIPART_BOUNDARY) + QByteArray("--");
var form = new FormData();
form.append("expected_size", expected_size);
form.append("original_size", original_size);
form.append("mode", "check_file");
form.append("file", fileInput.files[0]);

var xhr = new XMLHttpRequest();
xhr.open('POST', action, true);
xhr.send(formData);
这个脚本将文件信息与实际文件一起发送,而我只想发送文件信息。有人知道我怎么做吗

以下是PHP脚本(我无法修改):


我已经通过手动设置我的头(如上面的C++代码),我的Ajax:

var boundary = generateBoundary();

var databuffer = "\r\n";
// set original_size
databuffer += "--" + boundary + "\r\n";
databuffer += "content-disposition: form-data; name=\"original_size\"\r\n\r\n";
databuffer += allFiles[index].size + "\r\n";
// set mode
databuffer += "--" + boundary + "\r\n";
databuffer += "content-disposition: form-data; name=\"mode\"\r\n\r\n";
databuffer += "check_file\r\n";
// set the file
databuffer += "--" + boundary + "\r\n";
databuffer += "content-disposition: form-data; name=\"file\"; filename=\"" + allFiles[index].name + "\"\r\n";
databuffer += "content-type: application/zip\r\n\r\n";
databuffer += ""; // this is de file content => empty
databuffer += "\r\n";
// end
databuffer += "--" + boundary + "--";
这将发送包含所需信息的文件,而不包含实际的文件内容。
我希望这对其他人有帮助。

如果您只关心文件名和文件大小,您可以将
文件[0]。名称
文件[0]。大小
发送到服务器。您的意思是像form.append(“file”,fileInput.files[0]。name)一样?我不知道这是可能的!谢谢,我会尝试一下:)。注意,
文件[0]。name
是字符串,
文件[0]。size
是整数。您必须修改服务器端代码以满足此更改(因为没有可用的
$\u文件)。嗯,我担心会出现这种情况。问题是他们不想修改PHP脚本:(.您的PHP脚本说
if(empty($\u FILES))exit();
,所以如果您无法更改PHP端,就没有其他方法了。