【发布时间】:2017-06-30 01:46:52
【问题描述】:
我正在使用 ajax 调用实现 拖放图片上传器, 我看到了一个关于这个的教程并像这样实现,使用这个代码我只能将图像保存为 .jpg 格式! (或我在代码中指定的任何一种格式)
上传的图片之前保存在 php://input 文件夹中,我们需要从该临时文件夹中抓取该图片以将其保存在服务器中,
但他们没有告诉任何东西根据图像类型更改图像格式,
现在我想上传原始格式的图片,如何在上传时收集图片信息?
这里是代码
<?php
$str =file_get_contents('php://input');
$filename = md5(time()).'.jpg';
$path = 'upload/'.$filename;
file_put_contents($path,$str);
echo $path;
这里是一些用于获取图像和发送 ajax 请求的 JS:
$(function(){
//select the drop container
var obj = $('.drop');
// dragover event listener
obj.on('dragover',function(e){
e.stopPropagation();
e.preventDefault();
$(this).css('border',"2px solid #16a085");
});
//drop event listener
obj.on('drop',function(e){
e.stopPropagation();
e.preventDefault();
$(this).css('border',"2px dotted #bdc3c7");
//get the files
var files = e.originalEvent.dataTransfer.files;
var file =files[0];
//console.log(file);
//upload data using the xhr object
upload(file);
});
function upload(file){
//create xhr object
xhr = new XMLHttpRequest();
//initiate request
xhr.open('post','drop.php',true);
//set headers
xhr.setRequestHeader('Content-Type',"multipart/form-data");
xhr.setRequestHeader('X-File-Name',file.fileName);
xhr.setRequestHeader('X-File-Size',file.fileSize);
xhr.setRequestHeader('X-File-Type',file.fileType);
//send the file
xhr.send(file);
}
});
【问题讨论】:
-
您在标题
X-File-Type中发送文件类型,因此请尝试使用:$_SERVER['HTTP_X_FILE_TYPE']。 -
不行,我刚才试过了,不用扩展就保存了!
-
你说的“保存而不扩展”是什么意思?使用
var_dump($_SERVER)检查该标头包含的内容。它可能是 mime 类型而不是扩展名。 -
它正在将文件保存为 _some_random_hashed_file_name_.undefined
-
1.再次转储
$_SERVER并查看它包含的内容。它可能是 mime 类型而不是扩展名。 2. 设置标题时,检查控制台中file.fileType包含的内容。 3.再看我的第一条评论,我拼错了标题名称但是已经更新了。
标签: php jquery ajax drag-and-drop image-uploading