0
C++ 프로그램을 대체하는 웹 응용 프로그램을 작성하고 있습니다. 응용 프로그램의 목적은 브라우저에서 사진을 추가하거나 가져 와서 서버에 업로드하는 것입니다.Ajax : 실제 파일없이 파일 정보 보내기
파일 업로드에는 파일이 서버에 이미 있는지 확인하고 그렇지 않은 경우 파일을 업로드하는 두 가지 주요 단계가 있습니다.
Ajax에서 첫 번째 기본 단계를 수행 할 수 있는지 궁금합니다 (PHP 스크립트는 실제 파일 내용없이 $ _FILES를 사용하고 있습니다).
는 C++ 코드는 다음과 같습니다 : 만 원하는 반면,
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("--");
내가 같은 것을 할 싶습니다 파일 정보를 보냅니다. 아무도 내가 어떻게이 일을 할 수 있는지 아니? 여기
는 PHP 스크립트 (I 수정할 수없는)입니다 ://check if the file was already uploaded to the server (for resuming an upload)
//returns file:exist or file:not_exist
//the post is the same as when transmitting a file, except the data block
if ('check_file' == $_POST['mode'])
{
echo "CHECK FILE\n";
if (!file_exists($_SESSION['localdir']))
{
echo "upload:fail\n";
echo "message:Unable to copy data on server\n";
exit();
}
if (empty($_FILES))
{
echo "upload:fail\n";
echo "message:No files were uploaded to the server\n";
exit();
}
$file = $_FILES['file'];
$path = $_SESSION['localdir'] . "/" . $file['name'];
if (file_exists($path))
{
echo $file['name'] . " already exists on the server \n";
echo "Server file size: " . filesize($path) . "\n";
echo "Uploaded file size: " . $_POST['original_size'] . " \n";
if (filesize($path) == $_POST['original_size'])
{
echo "file:exist\n";
//add the file to the global list if it is not already there
if (!array_search($file['name'], $_SESSION['filenames'], true)) //true=strict
array_push($_SESSION['filenames'], $file['name']);
}
else
echo "file:not_exist\n";
}
}
파일 이름과 파일 크기에만 관심이 있다면'files [0] .name'과'files [0] .size'를 서버에 보낼 수 있습니다. – Passerby
form.append ("file", fileInput.files [0] .name)와 같은 뜻입니까? 나는 그것이 가능하다는 것을 몰랐다! 고마워, 나는 그것을 시도 할 것이다 :). –
주의,'files [0] .name'은 ** 문자열 **,'files [0] .size'는 ** 정수 **입니다. ('$ _FILES'가 없으므로)이 변경 사항을 충족 시키려면 서버 측 코드를 수정해야합니다. – Passerby