php 发送 二进制,将二进制字符串保存到POST发送的php文件中

我有一个用于(.jpg,.ai,.pdf,.flv,.psd …. etc.)的拖放上传器

我正在读取文件为二进制文件,并在jquery帖子中发送字符串:

function importZoneDrop(evt) {

evt.stopPropagation();

evt.preventDefault();

var files = evt.dataTransfer.files; // FileList object.

// files is a FileList of File objects. List some properties.

for (var i = 0, f; f = files[i]; i++) {

var start = 0;

var stop = files[0].size - 1;

var reader1 = new FileReader();

var reader2 = new FileReader();

var ext = f.name.substring(f.name.indexOf(".")+1);

if(ext == "JPEG" || ext == "jpeg" || ext == "JPG"){

ext ="jpg";

}

reader1.onload = (function(theFile) {

return function(e) {

// Render thumbnail.

$("#import-drop-zone").append(''+e.target.result+'');

};

})(f);

reader2.onloadend = function(evt) {

if (evt.target.readyState == FileReader.DONE) { // DONE == 2

$.post("/process/upload.php",{"blob":evt.target.result,"extension":ext},function(data){

console.log(data);

});

}

};

reader1.readAsDataURL(f);

var blob = f.slice(start, stop + 1);

reader2.readAsBinaryString(f);

}

}

这可以正常工作并发送文件.接下来获取字符串并使用file_put_contents编写它:

$extension = $_POST['extension'];

$file = $_POST['blob'];//sent from jquery post

$filePath = "../_temp/monkey.".$extension;

file_put_contents($filePath,$file);

if(file_put_contents($filePath,$file)){

echo json_encode("it worked");

}else{

echo json_encode("it failed");

}

这将成功写入文件.但是该文件不起作用,它已损坏.

我究竟做错了什么?

解决方法:

file_put_contents($filePath, base64_decode($file));

请注意,您当前正在两次写入数据.别.

if (file_put_contents($filePath, base64_decode($file))) {

很好

编辑

另外,直接上传二进制文件效率更高也没有任何价值,然后可以跳过base64_decode.像这样:

var xhr = new XMLHttpRequest(),

data = new FormData();

data.append("file", f); // You don't need to use a FileReader

// append your post fields

// attach your events

xhr.addEventListener('load', function(e) {});

xhr.upload.addEventListener('progress', function(e) {});

xhr.open('POST', '/process/upload.php', true);

xhr.send(data);

您可以查看一些示例here的其余事件here.

标签:file-upload,binary,xmlhttprequest,php,jquery

来源: https://codeday.me/bug/20191031/1979049.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值