Java 不支持的媒体类型415-上载照片
我知道我可以在互联网上找到这个问题的十亿种变体,但不幸的是,我真的不知道如何解决我的问题 我只是想制作一个Spring应用程序,在这里我可以上传和预览从我的电脑中选择的照片,并将其保存在数据库中 我不断收到“不支持的媒体类型”错误 我已经通读了整个互联网,但我真的不知道 这是我的密码:Java 不支持的媒体类型415-上载照片,java,json,ajax,spring,rest,Java,Json,Ajax,Spring,Rest,我知道我可以在互联网上找到这个问题的十亿种变体,但不幸的是,我真的不知道如何解决我的问题 我只是想制作一个Spring应用程序,在这里我可以上传和预览从我的电脑中选择的照片,并将其保存在数据库中 我不断收到“不支持的媒体类型”错误 我已经通读了整个互联网,但我真的不知道 这是我的密码: @POST @Path("/upload") @Consumes(ExtendedMediaType.MULTIPART_FORM_DATA) @Produces(ExtendedMediaType.APPLIC
@POST
@Path("/upload")
@Consumes(ExtendedMediaType.MULTIPART_FORM_DATA)
@Produces(ExtendedMediaType.APPLICATION_JSON)
@ApiOperation(
value = "Upload a selected image",
notes = "Return with the ID of the uploaded image.",
response = ByteArrayInputStream.class)
@ApiResponses(value = {
@ApiResponse(code = NotAcceptedMediaTypeError.HTTP_RESPONSE_CODE, message = NotAcceptedMediaTypeError.SWAGGER_API_RESPONSE_MESSAGE, response = ErrorInfo.class)})
@Transactional
@Override
public Response uploadImage(@RequestParam("file") final MultipartFile file) throws NotAcceptedMediaTypeError, IOException, ParseException {
InputStream inputStream = file.getInputStream();
List<String> acceptedExtensions = new ArrayList<>();
acceptedExtensions.add("jpg");
acceptedExtensions.add("png");
try (LimitedSizeInputStream limitedSizeInputStream = new LimitedSizeInputStream(inputStream, Long.parseLong(env.getProperty("spring.servlet.multipart.max-file-size")))) {
byte[] content = IOUtils.toByteArray(limitedSizeInputStream);
// check the type of the uploaded file
org.apache.tika.mime.MediaType uploadedMediaType = ContentTypeDetector.getMediaType(content);
boolean validMediaType = acceptedExtensions.contains(uploadedMediaType.toString());
if (validMediaType) {
Image image = Image.builder().content(content).build();
imageMapper.saveImage(image);
FormDataContentDisposition fileDetail = new FormDataContentDisposition(CustomHttpHeader.PROCESS_ID);
ImageMetadata imageMetadata = buildImageMetadata(fileDetail, image);
imageMapper.saveMetadata(imageMetadata);
return Response.ok().entity(imageMetadata.getUuid()).build();
} else {
throw new NotAcceptedMediaTypeError(uploadedMediaType.toString(), acceptedExtensions);
}
}
}
@POST
@路径(“/upload”)
@使用(ExtendedMediaType.MULTIPART\u FORM\u数据)
@产生(ExtendedMediaType.APPLICATION_JSON)
@蜂房手术(
value=“上传所选图像”,
notes=“返回上载图像的ID。”,
response=ByteArrayInputStream.class)
@ApiResponses(值={
@ApiResponse(code=NotAcceptedMediaTypeError.HTTP_RESPONSE_code,message=NotAcceptedMediaTypeError.SWAGGER_API_RESPONSE_message,RESPONSE=ErrorInfo.class)})
@交易的
@凌驾
公共响应上载映像(@RequestParam(“文件”)最终多部分文件)抛出NotAcceptedMediaTypeError、IOException、ParseException{
InputStream InputStream=file.getInputStream();
List acceptedExtensions=new ArrayList();
接受扩展。添加(“jpg”);
acceptedExtensions.add(“png”);
try(LimitedSizeInputStream LimitedSizeInputStream=new LimitedSizeInputStream(inputStream,Long.parseLong(env.getProperty(“spring.servlet.multipart.max file size”)){
byte[]content=IOUtils.toByteArray(limitedSizeInputStream);
//检查上传文件的类型
org.apache.tika.mime.MediaType uploademdediatype=ContentTypeDetector.getMediaType(content);
布尔值validMediaType=acceptedExtensions.contains(uploadedMediaType.toString());
if(validMediaType){
Image=Image.builder().content(content.build();
imageMapper.saveImage(图像);
FormDataContentDispositionFileDetail=新的FormDataContentDisposition(CustomHttpHeader.PROCESS\u ID);
ImageMetadata ImageMetadata=buildImageMetadata(文件详细信息,图像);
imageMapper.saveMetadata(imageMetadata);
返回Response.ok().entity(imageMetadata.getUuid()).build();
}否则{
抛出新的NotAcceptedMediaTypeError(uploadedMediaType.toString(),acceptedExtensions);
}
}
}
和my.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Image Service</title>
<script src="https://code.jquery.com/jquery-3.2.1.min.js" crossorigin="anonymous"></script>
</head>
<body>
<h1>RDBMS Image REST Service</h1>
<h3>File upload demo</h3>
<ul>
<li>
<form id="upload-file-form" method="post" enctype="multipart/form-data" action="api/upload">
Upload your file: <input type="file" name="file" size="45" accept="image/png,image/jpeg,image/gif"/>
<br>
<input id="submit-button" type="submit" value="Upload"/>
</form>
</li>
<li><p>Result: <br><span id="result"></span></p></li>
</ul>
<h3>Show Image</h3>
<ui>
<li>original:<img id="image-o" src="#" alt="original image" /></li>
<li>small: <img id="image-s" src="#" alt="small image" /></li>
<li>medium: <img id="image-m" src="#" alt="medium image" /></li>
<li>large: <img id="image-l" src="#" alt="large image" /></li>
<li>extra large: <img id="image-xl" src="#" alt="extra large image" /></li>
</ui>
<script type="text/javascript">
$(document).ready(function () {
$('#submit-button').click(function (event) {
//stop submit the form, we will post it manually
event.preventDefault();
// get form
var form = $('#upload-form')[0];
// create an FormData object
var data = new FormData(form);
// disabled the submit button
$("#submit-button").prop("disabled", true);
// post data
$.ajax({
type: "POST",
enctype: 'multipart/form-data',
url: "api/upload",
data: data,
processData: false,
contentType: false,
cache: false,
timeout: 600000,
success: function (data) {
// shows server's response
$("#result").text(data);
console.log("SUCCESS: ", data);
enableSubmitButton();
updateImages(data);
},
error: function (e) {
// shows server's response
$("#result").text(e.responseText);
console.log("ERROR: ", e);
enableSubmitButton();
updateImages(e.responseText);
}
});
headers: {
contentType: 'application/json'
}
});
});
function enableSubmitButton() {
$("#submit-button").prop("disabled", false);
}
function updateImages(data) {
var url = 'http://localhost:9001/image/api/' + data;
$('#image-s').attr('src',url + '?size=s');
$('#image-m').attr('src',url + '?size=m');
$('#image-l').attr('src',url + '?size=l');
$('#image-xl').attr('src',url + '?size=xl');
$('#image-o').attr('src',url + '?size=o');
}
</script>
</body>
图像服务
RDBMS映像REST服务
文件上传演示
-
上载您的文件:
- 结果:
显示图像
原件:
小型:
中等:
大型:
特大型:
$(文档).ready(函数(){
$(“#提交按钮”)。单击(函数(事件){
//停止提交表单,我们将手动发布
event.preventDefault();
//形成
变量形式=$(“#上传形式”)[0];
//创建FormData对象
var数据=新表格数据(表格);
//禁用“提交”按钮
$(“#提交按钮”).prop(“已禁用”,true);
//发布数据
$.ajax({
类型:“POST”,
enctype:“多部分/表单数据”,
url:“api/上传”,
数据:数据,
processData:false,
contentType:false,
cache:false,
超时:600000,
成功:功能(数据){
//显示服务器的响应
$(“#结果”)。文本(数据);
console.log(“成功:”,数据);
enableSubmitButton();
更新图像(数据);
},
错误:函数(e){
//显示服务器的响应
$(“#结果”).text(e.responseText);
日志(“错误:”,e);
enableSubmitButton();
更新图像(如responseText);
}
});
标题:{
contentType:'应用程序/json'
}
});
});
函数enableSubmitButton(){
$(“#提交按钮”).prop(“已禁用”,false);
}
函数更新图像(数据){
var url='1〕http://localhost:9001/image/api/“+数据;
$('image-s').attr('src',url+'?size=s');
$('image-m').attr('src',url+'?size=m');
$('#image-l').attr('src',url+'?size=l');
$('#image xl').attr('src',url+'?size=xl');
$('image-o').attr('src',url+'?size=o');
}
是内容类型标题有问题还是相对URL有问题
有什么建议吗?我真的很高兴 我看不到正在传递文件查询参数。能否尝试删除@RequestParam(“文件”)@dorcsi@Barath然后是……:“errorMessage”:“文件(系统找不到指定的文件)”