文件上傳獲取路徑顯示c:\fakepath\...解決辦法

最近再做一個文件上傳的功能,突然發現用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"
                   οnchange="$('#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!');
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章