Ajax - запрос перекрестного источника заблокирован - отсутствует «Access-Control-Allow-Origin» - Spring Boot - PullRequest
0 голосов
/ 19 сентября 2018

Я реализовал API, используя Spring Boot и разрешил CrossOrigin на своих доменах.

Это выглядит примерно так

// Endpoints start here ... ironic right?
@RestController
@CrossOrigin(origins = {"http://localhost:8080", "http://a.example.com"})
public class FileController {
    private static final Logger logger = LoggerFactory.getLogger(FileController.class);

    @Autowired
    private FileStorageService fileStorageService;

    // Upload file endpoint
    // POST
    @PostMapping("/uploadfile")
    .
    .
    .


}

Я следовал за ответамимного похожих вопросов на SO, но, похоже, это не работает.API работает на Postman, но при реализации front-end с использованием jQuery и Ajax я получаю следующую ошибку на firefox.

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://a.example.com/fileupload/uploadfile. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]

Где еще мне следует разрешить CORSи что мне делать?

Мой код выглядит следующим образом.

var max_fields = 10;
var wrapper = $(".input_fields_wrap");
var add_button = $(".add_field_button");
var x = 0;

$(add_button).click(function(e){
    e.preventDefault();
    if(x < max_fields){
        x++;
        $(wrapper).append(`
        <span>
        <br>
        <div class="row" id="field[${x}]">
            <div class="col">
                <input type="text" name="fileName" id="field[${x}]-fileName" class="form-control" placeholder="File name">
            </div>
            <div class="col">
                <div class="custom-file">
                    <input type="file" class="custom-file-input" name="fileUpload" id="field[${x}]-fileUpload" aria-describedby="inputGroupFileAddon01">
                    <label class="custom-file-label" for="fileUpload">Choose file</label>
                </div>
            </div>
            <div class="col">
                <input type="text" id="field[${x}]-fileUploadURL" name="fileUploadURL" class="form-control" placeholder="File URL" readonly>
            </div>
            <div class="col">
                <button class="remove_field btn"> Remove Field </button>
            </div>
        </div>
        </span>
        <script>
            document.getElementById("field[${x}]-fileUpload").onchange = function(e) {
                e.preventDefault();
                console.log("FILE UPLOAD OF field[${x}]");

                var filePath = $(this).val();
                var form = new FormData();
                form.append("file", filePath);

                var settings = {
                    "async": true,
                    "crossDomain": true,
                    "url": "http://b.example.com/fileupload/uploadfile",
                    "method": "POST",
                    "headers": {
                        "Content-Type": "application/x-www-form-urlencoded",
                        "Cache-Control": "no-cache",
                        "Postman-Token": "f404898e-4229-4a14-933f-51e9b05c6628"
                    },
                    "processData": false,
                    "contentType": false,
                    "mimeType": "multipart/form-data",
                    "data": form
                }

                $.ajax(settings).done(function (response) {
                console.log(response);
                });
            };
        </script>
        `);
    }
});

1 Ответ

0 голосов
/ 19 сентября 2018

Попробуйте добавить allowCredentials = "true" и origins = "*" к @CrossOrigin as,

@CrossOrigin(origins = "*", allowCredentials = "true", allowedHeaders = "*")

Вы можете изменить значения origins и allowedHeaders в соответствии с вашими требованиями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...