Java 不支持的媒体类型415-上载照片

Java 不支持的媒体类型415-上载照片,java,json,ajax,spring,rest,Java,Json,Ajax,Spring,Rest,我知道我可以在互联网上找到这个问题的十亿种变体,但不幸的是,我真的不知道如何解决我的问题 我只是想制作一个Spring应用程序,在这里我可以上传和预览从我的电脑中选择的照片,并将其保存在数据库中 我不断收到“不支持的媒体类型”错误 我已经通读了整个互联网,但我真的不知道 这是我的密码: @POST @Path("/upload") @Consumes(ExtendedMediaType.MULTIPART_FORM_DATA) @Produces(ExtendedMediaType.APPLIC

我知道我可以在互联网上找到这个问题的十亿种变体,但不幸的是,我真的不知道如何解决我的问题

我只是想制作一个Spring应用程序,在这里我可以上传和预览从我的电脑中选择的照片,并将其保存在数据库中

我不断收到“不支持的媒体类型”错误

我已经通读了整个互联网,但我真的不知道

这是我的密码:

@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”:“文件(系统找不到指定的文件)”