【问题标题】:Fake path Javascript Issue假路径Javascript问题
【发布时间】:2016-08-19 00:49:12
【问题描述】:

当我尝试检索文件路径时,它会显示如下结果:“C:\fakepath\amine.jpeg”,因此由于该问题,服务器中的上传无法正常工作。

 $('input[type=file]').change(function () {
              var filePath=$('#file-input').val();


         $.ajax({
              url : "{{path('upload_file')}}",
              type : 'POST',
              data: {
                   filePath : filePath,
                   method: 'post',
                   params: {
                       action: "uploadFile"
                   }
               },
              success : function(data, textStatus, jqXHR) {

                alert(data);


              }
          });

             }); 

【问题讨论】:

  • 你是说它实际上是在插入一个名为“fakepath”的文件夹吗?它应该有不同的文件夹名称还是应该不存在?
  • 文件输入不会透露文件的完整路径,只是文件 name - 这足以让上传过程正常工作。
  • 这看起来不像是通过 ajax 上传文件的正确方法。
  • 如果我没记错的话,这就是某些浏览器(谷歌浏览器?)在提示时返回的文件路径,而不是仅仅抛出错误。这是一个明显的安全限制,您不应试图规避它。但这是经典的XY problem:您不需要通过 AJAX 上传文件的文件路径。
  • 文件路径与您的服务器完全无关:有趣的是文件 name - 在本例中为 amine.jpeg

标签: javascript php ajax


【解决方案1】:

您的文件默认上传到临时文件夹。您需要将其移动到实际位置才能像在 php 中一样访问它:

move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)

参考见http://www.w3schools.com/php/php_file_upload.asp

【讨论】:

  • 我在 Symfony 2 下工作,我想上传文件的服务器是 Owncloud
  • Samar Rizvi 在 symfony 中 $FILES 的等价物是什么
  • 可能这个 Stack Overflow url 可以帮助你stackoverflow.com/questions/17951294/…
【解决方案2】:

你做错了。 您必须创建一个表单对象并通过 $.ajax 发送它。 我假设您已经编写了正确的服务器端代码来保存图像。

    var f =   new FormData();
    f.append('img',document.getElementById("file-input").files[0]);

    var url= "{{Your URL}}";
    $.ajax({
        url: url,
        type:"post",
        data: f,
        dataType:"JSON",
        processData: false,
        contentType: false,
        success: function (data, status)
        {
            console.log(data);
        },
        error: function (data)
        {

          if (data.status === 422) {

                console.log("upload failed");


            } else {
                console.log("upload success");

                }

    }); 

【讨论】:

  • 不,我只想通过 ajax 发送文件的完整路径,并且上传在我的控制器中完成,因为我正在使用 curl 将我的文件上传到 Owncloud 服务器
猜你喜欢
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-28
  • 1970-01-01
  • 2012-09-24
  • 2018-05-03
相关资源
最近更新 更多