Я реализовал 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>
`);
}
});