首页 > 解决方案 > 无法使用 ajax 在 laravel 中验证加密的 word 文档(docx)

问题描述

当我在 laravel 和 ajax 中上传加密的 word 文档 (docx) 时出现问题。但是,当我将此文档另存为 word 文档 97-2003 (doc) 时,不会出现任何问题。这是我的代码

list_draft.blade.php

<div class="form-group">
    <div class="col-md-8" for="file_draft">
        <input type="file" class="form-control" name="file_draft" id="file_draft">
        <span class="help-block" for="file_draft"></span>
    </div>
    <div class="col-md-4" for="draft_status">
        <select class="form-control" name="draft_status" id="draft_status">
            <option value="">--Pls Select--</option>
            @foreach($drafts_status as $draft_status)
            <option value="{{$draft_status->draft_status_id}}">{{$draft_status->draft_status_name}}</option>
            @endforeach
        </select>
        <span class="help-block" for="draft_status"></span>
    </div>
</div>
<div class="form-group">
    <div class="col-md-8" for="doc_note">
        <textarea name="doc_note" id="doc_note" class="form-control" rows="3" placeholder="Notes"></textarea>
        <span class="help-block" for="doc_note"></span>
    </div> 
    <div class="col-md-4">
        <button type="button" id="submit-draft" class="btn btn-danger">Upload Draft</button>  
    </div>
</div>


<script>
    $("#submit-draft").on('click', function (e) {
        e.preventDefault();
        var data = new FormData();
        data.append('_token', '{{csrf_token()}}');
        data.append('doc_note', $('#doc_note').val());
        data.append('draft_status', $('#draft_status').val());
        var file = ($('#file_draft')[0].files[0]);
        data.append('file_draft', file);
        $.ajax({
            url: "{{route('lo.upload_draft')}}",
            type: "post",
            data: data,
            contentType: false,
            cache: false,
            processData: false,
            success: function (data) {
                //When success.....
            },
            error: function (data) {
                //When Error.....
            }
        });
    });
</script>

LoController.php

public function upload_draft(Request $request) {
        //assign variable
        $file = $request->file('file_draft');
        $lo_draft_status = $request->get('draft_status');
        $lo_draft_notes = $request->get('doc_note');

        $rule = array(
            "draft_status" => "required",
            "doc_note" => "required",
            "file_draft" => 'mimes:doc,docx|required'
        );
        $message = array(
            "draft_status.required" => "Field is required",
            "doc_note.required" => "Field is required",
            "file_draft.required" => "Field is required",
            "file_draft.mimes" => "File must be of the following type : doc, docx"
        );

        $request->validate($rule, $message);
        //Some code.....
}

当我添加dd($file->getMimeType());之前$request->validate($rule, $message);它会返回application/encrypted

我已阅读此问题Using Mimes for Validating Laravel File Post - Word File但他们使用普通帖子

我使用 Laravel 5.8.36

标签: phpajaxlaravel

解决方案


推荐阅读