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

本文介绍了解决AJAX上传文件时路径显示为c:fakepath...的问题,通过使用FormData和AJAX进行文件上传,避免了iframe提交的不足,提高了上传的安全性和效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近再做一个文件上传的功能,突然发现用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!');
    }

 

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值