简体   繁体   English

如何使用 XMLHttpRequest 将压缩的 blob 数据上传到 javascript 中的服务器?

[英]How to upload zipped blob data to server in javascript using XMLHttpRequest?

I am trying to upload a blob which is a zip file, generated by JSZip().我正在尝试上传一个由 JSZip() 生成的 zip 文件的 blob。 Following code works perfectly fine if I put text (as a 'filedata') instead of blob (zip data).如果我放置文本(作为“文件数据”)而不是 blob(zip 数据),则以下代码可以正常工作。 If I try to upload a zipped blob, I always get this error "filedata does not exists.", I don't think I miss any post on google to fix this issue.如果我尝试上传一个压缩的 blob,我总是会收到这个错误“文件数据不存在。”,我认为我不会错过任何关于谷歌的帖子来解决这个问题。 but nothing works, I have enough PHP upload limit.但没有任何作用,我有足够的 PHP 上传限制。 so that's not a problem, Even if I try to upload a zipped image in kb size.所以这不是问题,即使我尝试上传 kb 大小的压缩图像。 it doesn't work.它不起作用。

I am using NodeJs and VSCode.我正在使用 NodeJs 和 VSCode。 I would really appreciate the solution.我真的很感激这个解决方案。 Thank you.谢谢你。

Client-side (Javascript):客户端(Javascript):

const req = new XMLHttpRequest();
req.responseType = 'blob';
const formData = new FormData();
formData.append('filename', fileName);
formData.append('filedata', blob, fileName);
req.open(
'POST',
'xyz.com/data/savedata.php',
true
);
req.upload.onprogress = function(e) {
if (e.lengthComputable) {
  const percentComplete = (e.loaded / e.total) * 100;
  console.log(percentComplete);
}
};

req.send(formData);

Server-side (savedata.php):服务器端(savedata.php):

<?php
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS");
    header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");

    $filename = $_POST['filename'];
    $filedata = $_POST['filedata'];
    
    $dataTime = date("Y-m-d h:m:s");
    
    if ( isset($_POST['filename']) ) {
        error_log ("$dataTime  FileName '$filename' exists!\n", 3, 'logs.txt');
    } else {
        $filename = "DataFile.zip";
        error_log ("$dataTime  FileName does not exists! A New name is created.\n", 3, 'logs.txt');
    }
    
    if ( isset($_POST['filedata']) ) {
        error_log ("$dataTime  File data exists!\n", 3, 'logs.txt');
    
        $file = fopen($filename, 'wb');
        
        if ($file !== false) {
            if (fwrite($file, $filedata)) {
                error_log ("$dataTime  File has been written successfully!\n", 3, 'logs.txt');
                fclose($file);
            }
        } else {
            error_log ("$dataTime  Could not open '$filename' file!\n", 3, 'logs.txt');
        }
    } else {
        error_log ("$dataTime  filedata does not exists!\n", 3, 'logs.txt');
    }
?>

I am not very good at PHP but i think it that you should access files using this:我不太擅长 PHP 但我认为您应该使用以下方式访问文件:

if ( isset($_FILES['filedata'] ) {
   move_uploaded_file( $_FILES['userFile']['tmp_name'], "Desired Directory");
}

See this for more information有关更多信息,请参阅

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何使用Javascript XMLHttpRequest将JSON数据对象发送到服务器? - How to send a JSON data object to the server using Javascript XMLHttpRequest? 如何使用JavaScript或reactjs压缩存储在浏览器中的BLOB图像并上传到服务器 - How to compress BLOB image stored in browser using javascript or reactjs and upload to server 使用 XMLHttpRequest 将变量数据发送到服务器 JavaScript 中的获取方法? - Sending variable data to server using XMLHttpRequest Get method in JavaScript? 带有 POST 数据的 Javascript XMLHttpRequest 上传文件 - Javascript XMLHttpRequest upload file with POST data 无法使用 XMLHttpRequest 将图像上传到服务器 - Unable to upload image to server using XMLHttpRequest javascript如何上传blob? - How can javascript upload a blob? 如何使用XMLHttpRequest和asp.net MVC将较大的Blob发布到服务器? - How post a large blob to server using XMLHttpRequest and asp.net MVC? 如何使用JavaScript将图像上传到Azure Blob存储 - How to upload image to azure blob storage using javascript 如何使用PHP和JavaScript将图像上传到具有blob:http链接的文件夹中? - How to upload an image into a folder with blob:http link using PHP and JavaScript? 需要帮助使用XMLHttpRequest将Blob从MySql传输到Javascript - Need help using XMLHttpRequest to transfer blob from MySql to Javascript
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM