gpt4 book ai didi

javascript - 上传二进制文件并将其像 Excel 一样保存在服务器中

转载 作者:行者123 更新时间:2023-11-29 23:53:02 33 4
gpt4 key购买 nike

我有一个 JavaScript 函数,它读取一个 excel 文件并在 document.getElementById("content").value 中返回一个对象 ArrayBuffer:

  <script type = "text/javascript">
function readFile(files){
console.log("DEntro de readFile");
var reader = new FileReader();
reader.readAsArrayBuffer(files[0]);
reader.onload = function(event){
var arrayBuffer = event.target.result;
array = new Uint8Array(arrayBuffer);
binaryString = String.fromCharCode.apply(null, array);
document.getElementById("fileContent").value = event.target.result;
}
}
</script>

所以,我想知道,如何将这个对象 ArrayBuffer 发送到服务器,并在服务器中将这个 ArrayBuffer 保存在生成​​原始 Excel 的 excel 文件中。

我能做什么?

编辑一:我想我做错了什么,因为我创建了文件,但是有奇怪的字符并且只有 31 个字节。

JavaScript:

    function readFile(files){
var reader = new FileReader();
reader.readAsArrayBuffer(files[0]);
reader.onload = function(event){
document.getElementById("fileContent").value = event.target.result;
}

}

Angular JS使用此功能,我以 JSON 格式将数据发送到服务器:

 self.uploadFile = function(){
var data = {
file : document.getElementById("fileContent").value,
};
publicDataServices.sendData("http://gnsys.local/publico/test/up", data).then(function(response){
switch(parseInt(response.result)){
case 0:
console.log("OK!!!");
break;
case 3: //Error de Sistemas
console.log("testControllers.js::uploadFile: Error de sistemas");
break;
}
});
}

PHP:

    $params = json_decode(file_get_contents('php://input'),true);
$property = new PropertyReader();
$fileRoute = $property->getProperty("scripts.ruta.querys");
$fileName = $fileRoute . "prueba.xls";

$input = fopen('php://input', 'rb');
$file = fopen($fileName, 'wb');

stream_copy_to_stream($input, $file);
fclose($input);
fclose($file);

编辑 II(有效!):

Angular JS:

 self.uploadFile = function(){
publicDataServices.sendData("http://gnsys.local/publico/test/up", document.getElementById("file").files[0]).then(function(response){
switch(parseInt(response.result)){
case 0:
console.log("OK!!!");
break;
case 3: //Error de Sistemas
console.log("testControllers.js::uploadFile: Error de sistemas");
break;
}
});
}

PHP:

    $property = new PropertyReader();
$fileRoute = $property->getProperty("scripts.ruta.querys");
$fileName = $fileRoute . "prueba.xls";

$input = fopen('php://input', 'rb');
$file = fopen($fileName, 'wb');

file_get_contents and file_put_contents
stream_copy_to_stream($input, $file);
fclose($input);
fclose($file);

我只是想知道如何获取原始文件名。

编辑三(发送文件名): Angular js:

 self.uploadFile = function(){ 
var promise = $q.defer();
var headers = {
"file-name" : document.getElementById("file").files[0].name
}
$http.post("http://gnsys.local/publico/test/up", document.getElementById("file").files[0], {headers:headers})
.success(function(response, status, headers, config){
promise.resolve(response);
console.log("resultado: " + response.result);
})
.error(function(data){
//Error de sistemas
console.log("Error en sendData: " + data)
})

return promise.promise;
}

PHP:

    $property = new PropertyReader();
$fileRoute = $property->getProperty("scripts.ruta.querys");
$fileName = $fileRoute . "prueba.xls";
//With this foreach we get all the headers so I can detect which i the right header to get the file name
foreach (getallheaders() as $name => $value) {
$log->writeLog(get_class($this) . "::" . __FUNCTION__ . ": name: " . $name . " value: " . $value);
}

$input = fopen('php://input', 'rb');
$file = fopen($fileName, 'wb');

stream_copy_to_stream($input, $file);
fclose($input);
fclose($file);

效果很好!

最佳答案

不必将File 对象转换为ArrayBuffer。您可以POST File 对象到服务器并使用fopen(), "php://input", file_get_contents()php,参见 Trying to Pass ToDataURL with over 524288 bytes Using Input Type Text

关于javascript - 上传二进制文件并将其像 Excel 一样保存在服务器中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42378096/

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