• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

文件上传获取路径显示c:\fakepath\…解决办法

php 海叔叔 4年前 (2021-10-28) 137次浏览 已收录 0个评论

做一个文件上传的功能,突然发现用AJAX上传时 文件路径变成了c:\fakepath\…

最后实在没办法了找到如下解决办法 暂时解决了问题

在页面添加隐藏表单,ajax提交完成时提交隐藏表单,并刷新指定的iframe实现页面不刷新完成文件提交

html

<form hidden="hidden" method="post" enctype="multipart/form-data" action="uploadFile"
              style="float: left;margin-left: 20px;" target="the_iframe">
            {{ csrf_field() }}
 
            <input type="file" name="practiseFile" id="practiseFile"
                   onchange="$('#practiseFileName').val($(this).val());" style="display:none">
 
 
            <button id="submit" type="submit" class="btn btn-success">提交</button>
        </form>
 
        <iframe id="is_iframe" name="the_iframe" style="display:none;"></iframe>

然后就被经理臭骂了一顿说了iframe的各种不好

最后又找到了另一种方式,js伪造表单将文件内容传到表单里实现文件上传 ,感觉是相对于上面的方法的改进版,其他的一些方法感觉不怎么好,都是将文件路径还原的一些方法,安全性有待考证。

JS

            // 点击按钮上传文件
            $('#upload_file_btn').click(function() {
                // 检查文件是否合法
                var fileFullName = $('#src_file_input').val();
                console.log(fileFullName);
                // 构建form数据
                var formData = new FormData();
                formData.append('file', $('#src_file_input')[0].files[0]); 
                // 上传文件
                $.ajax({
                    contentType: false,
                    cache: false,
                    processData: false,
                    url: "/upload",
                    type: 'POST',
                    data: formData,
                    success: function(data) {
                        console.log(data);
                    },
                    error: function() {
                        console.log('Upload file failed!');
                    }
                });
            });

PHP

 public function upload(Request $request)
    {
        // 获取源文件
        $src_file = $request->file('file');
        Log::info($src_file);
        // 判断文件是否有效
        if (($src_file != null) && ($src_file->isValid() == true)) {
            // 输出源文件绝对路径
            Log::info($src_file->getRealPath());
            // 输出源文件扩展名
            Log::info($src_file->getClientOriginalExtension());
            // 存储源文件
            Storage::disk('public')->put('test.xlsx', file_get_contents($src_file->getRealPath()));
            // 返回
            return array('code' => 0, 'msg' => '文件上传成功!');
        } else {
            // 返回
            return array('code' => -1989, 'msg' => '文件上传失败!');
        }
        
        // 默认返回
        return array('code' => 0, 'msg' => 'success!');
    }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:文件上传获取路径显示c:\fakepath\…解决办法

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址