Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/435.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在保存到文件夹(Javascript)之前修复方向(上载图像)?_Javascript_Php_Jquery_Image_Image Uploading - Fatal编程技术网

如何在保存到文件夹(Javascript)之前修复方向(上载图像)?

如何在保存到文件夹(Javascript)之前修复方向(上载图像)?,javascript,php,jquery,image,image-uploading,Javascript,Php,Jquery,Image,Image Uploading,我尝试以下参考: 我试着这样: 我的代码如下所示: $(function () { var result = $('#result') var currentFile function updateResults (img, data) { var content if (!(img.src || img instanceof HTMLCanvasElement)) { content = $('<span>Loading image fil

我尝试以下参考:

我试着这样:

我的代码如下所示:

$(function () {
  var result = $('#result')
  var currentFile

  function updateResults (img, data) {
    var content
    if (!(img.src || img instanceof HTMLCanvasElement)) {
      content = $('<span>Loading image file failed</span>')
    } else {
      content = $('<a target="_blank">').append(img)
        .attr('download', currentFile.name)
        .attr('href', img.src || img.toDataURL())

      var form = new FormData();
      form.append('file', currentFile);

       $.ajax({
                    url:'response_upload.php',
                    type:'POST',
                    data:form,
                    processData: false,
                    contentType: false,
                    success: function (response) {
                        console.log(response);
                    },
                    error: function () {
                        console.log(error)
                    },
                });
    }
    result.children().replaceWith(content)
  }

  function displayImage (file, options) {
    currentFile = file
    if (!loadImage(
        file,
        updateResults,
        options
      )) {
      result.children().replaceWith(
        $('<span>' +
          'Your browser does not support the URL or FileReader API.' +
          '</span>')
      )
    }
  }

  function dropChangeHandler (e) {
    e.preventDefault()
    e = e.originalEvent
    var target = e.dataTransfer || e.target
    var file = target && target.files && target.files[0]
    var options = {
      maxWidth: result.width(),
      canvas: true,
      pixelRatio: window.devicePixelRatio,
      downsamplingRatio: 0.5,
      orientation: true
    }
    if (!file) {
      return
    }
    displayImage(file, options)
  }

  // Hide URL/FileReader API requirement message in capable browsers:
  if (window.createObjectURL || window.URL || window.webkitURL ||
      window.FileReader) {
    result.children().hide()
  }

  $('#file-input').on('change', dropChangeHandler)
})
$(函数(){
变量结果=$(“#结果”)
var当前文件
函数更新结果(img,数据){
var含量
if(!(img.src | | img htmlcanvaseElement实例)){
内容=$(“加载图像文件失败”)
}否则{
内容=$('').append(img)
.attr('download',currentFile.name)
.attr('href',img.src | | img.toDataURL())
var form=new FormData();
form.append('file',currentFile);
$.ajax({
url:'response_upload.php',
类型:'POST',
数据:表格,
processData:false,
contentType:false,
成功:功能(响应){
控制台日志(响应);
},
错误:函数(){
console.log(错误)
},
});
}
result.children().replaceWith(内容)
}
函数displayImage(文件、选项){
currentFile=file
如果(!loadImage(
文件
更新结果,
选择权
)) {
result.children().replaceWith(
$('' +
“您的浏览器不支持URL或FileReader API。”+
'')
)
}
}
函数dropChangeHandler(e){
e、 预防默认值()
e=e.原始事件
var target=e.dataTransfer | | e.target
var file=target&&target.files&&target.files[0]
变量选项={
maxWidth:result.width(),
画布:是的,
pixelRatio:window.devicePixelRatio,
下采样率:0.5,
方向:正确
}
如果(!文件){
返回
}
显示图像(文件、选项)
}
//在功能强大的浏览器中隐藏URL/FileReader API要求消息:
if(window.createObjectURL | | | | | | | window.webkitURL||
window.FileReader){
result.children().hide()
}
$('#文件输入')。在('change',dropChangeHandler)上
})
如果我上传了图像,保存在文件夹中的图像仍然不使用其方向集中的图像。我想上传图片时,文件夹中存储的图像是已设置方向的图像


似乎通过ajax发送的
currentFile
是未修改的currentFile。如何获取修改后的
currentFile

您希望更改图像的某些内容(尺寸、roataion等)并将其上载到服务器,但这里的问题是ImageLoad插件将修改后的图像作为
画布
表示它不会修改在中选择的原始文件
。由于您是以
格式发送文件输入对象。append('file',currentFile)修改后的文件不会被发送,只会发送原始文件

如何修复?

由于浏览器限制,您(或插件)无法修改
上的任何内容,您也无法将画布直接发送到服务器,因此唯一的方法(使用和工作良好)是将图像的数据URI作为常规文本发送,然后在服务器上解码,将其写入文件。您可能还希望发送原始文件名,因为数据URI是纯内容,不包含文件名

改变

  form.append('file', currentFile);

PHP


祝你好运

经过一番研究后,我找到了解决方案,多亏了这个很棒的插件。(canvas-to-blob.js)

此插件将直接将画布转换为服务器,服务器将看到它,就像它是一个实际文件一样,并将在您的$\u文件数组中获得新的(修改的)文件。您只需在画布对象(
img
)上调用
toBlob
。之后,您将获得blob,然后可以将其发送到FormData中。下面是您更新的
updateResults()
函数

function updateResults (img, data) {
  var content
  if (!(img.src || img instanceof HTMLCanvasElement)) {
    content = $('<span>Loading image file failed</span>')
  } 
  else 
  {
       content = $('<a target="_blank">').append(img)
      .attr('download', currentFile.name)
      .attr('href', img.src || img.toDataURL())

      img.toBlob(
           function (blob) {
               var form = new FormData();
               form.append('file', blob, currentFile.name);

               $.ajax({
                  url:'response_upload.php',
                  type:'POST',
                  data:form,
                  processData: false,
                  contentType: false,
                  success: function (response) {
                    console.log(response);
                  },
                  error: function () {
                    console.log(error)
                  },
               });

           },'image/jpeg'   
      );
      result.children().replaceWith(content);
  }
}
函数更新结果(img,数据){
var含量
if(!(img.src | | img htmlcanvaseElement实例)){
内容=$(“加载图像文件失败”)
} 
其他的
{
内容=$('').append(img)
.attr('download',currentFile.name)
.attr('href',img.src | | img.toDataURL())
伊姆格托布洛布(
函数(blob){
var form=new FormData();
append('file',blob,currentFile.name);
$.ajax({
url:'response_upload.php',
类型:'POST',
数据:表格,
processData:false,
contentType:false,
成功:功能(响应){
控制台日志(响应);
},
错误:函数(){
console.log(错误)
},
});
},“图像/jpeg”
);
result.children().replacetwith(content);
}
}

在php中,我添加了以下内容:
echo';打印($_POST['file']);回声';模具()
以检查结果。但是它太长了,没有显示任何东西,如果我尝试这样做:
echo';打印(美元文件);回声';模具()
,结果空数组如下:
array()
yes
$\u POST['file']
将不显示图像,而是显示其编码形式,因此您必须使用
base64\u decode
,不要使用
$\u FILES
它应该是空的,您可以添加和额外的
form.append('file',currentFile)但这将只提供原始文件。因此,您必须使用
$\u POST['file']
并解码itOkay。我跟随你的方式。那么,如何将数据文件存储在文件夹中?我尝试了
echo';印刷费($fp);回声'
,结果:
资源id#3
。这不是一个数据文件,我想要这样的结果:
Array([file]=>Array([name]=>chelsea.jpeg[type]=>image/jpeg[tmp\u name]=>C:\xampp\tmp\php1E31.tmp
  $img_data=substr( $_POST['file'] , strpos( $_POST['file'] , "," )+1); 
  //removes preamble ( like data:image/png;base64,)
  $img_name=$_POST['file_name'];

  $decodedData=base64_decode($img_data);

  $fp = fopen( $img_name , 'wb' );
  fwrite($fp, $decodedData);
  fclose($fp );
function updateResults (img, data) {
  var content
  if (!(img.src || img instanceof HTMLCanvasElement)) {
    content = $('<span>Loading image file failed</span>')
  } 
  else 
  {
       content = $('<a target="_blank">').append(img)
      .attr('download', currentFile.name)
      .attr('href', img.src || img.toDataURL())

      img.toBlob(
           function (blob) {
               var form = new FormData();
               form.append('file', blob, currentFile.name);

               $.ajax({
                  url:'response_upload.php',
                  type:'POST',
                  data:form,
                  processData: false,
                  contentType: false,
                  success: function (response) {
                    console.log(response);
                  },
                  error: function () {
                    console.log(error)
                  },
               });

           },'image/jpeg'   
      );
      result.children().replaceWith(content);
  }
}