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

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

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

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

html



        

然后就被经理臭骂了一顿说了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!');
    }

 

你可能感兴趣的:(前端)