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

时间:2024-11-08 11:58:35

最近再做一个文件上传的功能,突然发现用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" 
                   onchange="$('#practiseFileName').val($(this).val());" style="display:none">


            <button  type="submit" class="btn btn-success">提交</button>
        </form>

        <iframe  name="the_iframe" style="display:none;"></iframe>

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

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

JS

        
            // 点击按钮上传文件
            $('#upload_file_btn').click(function() {
                // 检查文件是否合法
                var fileFullName = $('#src_file_input').val();
                (fileFullName);
                // 构建form数据
                var formData = new FormData();
                ('file', $('#src_file_input')[0].files[0]); 
                // 上传文件
                $.ajax({
                    contentType: false,
                    cache: false,
                    processData: false,
                    url: "/upload",
                    type: 'POST',
                    data: formData,
                    success: function(data) {
                        (data);
                    },
                    error: function() {
                        ('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('', file_get_contents($src_file->getRealPath()));
            // 返回
            return array('code' => 0, 'msg' => '文件上传成功!');
        } else {
            // 返回
            return array('code' => -1989, 'msg' => '文件上传失败!');
        }
        
        // 默认返回
        return array('code' => 0, 'msg' => 'success!');
    }