Springbootアバター画像はformdataを使用してアップロードされ、画像を返すためのURLが表示され、アバターを変更できます

1.フロントエンドは、アバター画像リソースをバックエンドへのAjaxリクエストの形式でformdataに送信します。

1.午後のバグを書いた著者の場合、ここで遭遇したすべてのバグを共有して、誰もが私のように穴を踏まないようにします。最初に全員にページ効果を見せ、画像をクリックして選択し、[アップロード]をクリックします。画像をアップロードし、
ここに画像の説明を挿入
HTML部分をCSSスタイルで自分でデバッグします

<label class="control-label file">
    <div>
        <img id="userUrl" style="border-radius: 100px;" src="${user.userUrl}">
    </div>
    <input type="file" id="photo">
    <input type="hidden" id="userId" value="${user.userId}">
</label>
<p style="margin-left: 20px;">点击头像选择图片,再点击上传</p>
<input id="changeBtn" class="btn btn-info" value="上传">

jsの部分:
formdataの使用にはいくつかの落とし穴があります。

  1. contentType:falseは、jQueryがcontentTypeを処理しないようにするためです。contentTypeをmultipart / form-dataに追加しないでください。ブラウザーが追加するため、メタに追加しないでください。それ以外の場合は、境界が表示されます。、国境が見つからない問題。
  2. processData:falseは、画像をアップロードしているため、jQueryがデータを文字列に処理しないようにします
$("#changeBtn").click(function () {
        var formData = new FormData();
        formData.append("photo",$('input#photo')[0].files[0]);
        formData.append("userId",$("#userId").val());//业务需求,需要把图片和用户关联起来
        $.ajax({
            url: "自己上传文件的url",
            type: 'POST',
            contentType: false,
            processData: false,
            data: formData,
            success: function (data) {
                $.alert({
                    title: data.code,
                    content: data.msg,
                });
                $("#userUrl").attr("src", data.userUrl); //使用jquery修改图片的src
            },
            error: function (data) {
                $.alert({
                    title: 'Error',
                    content: '修改头像失败,请稍后重试!',
                });
            }
        });
    });

3.バックエンドコントローラセクション

1.コントローラー、写真をローカルに書き込み、フロントエンドに送り返す

	private final String writePath = "F:\\images";   //写入本地保存的绝对路径

    private final String savePath = "/images/";   //写入数据库中的路径

	@RequestMapping(value = "/changePhoto")
    @ResponseBody
    public Map<String,String> changePhoto(@RequestParam MultipartFile photo, @RequestParam Long userId){
        Map<String,String> data = new HashMap<>();
        if (photo.isEmpty()){
            data.put("code","error");
            data.put("msg","上传图片为空!");
            return data;
        }
        //获取MultipartFile文件的后缀
        String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf(".") + 1);
        //限制只能上传三种图片格式,不要使用==,因为他是比较基本数据类型的,String是对象
        if (suffix.equalsIgnoreCase("jpg") ||
                suffix.equalsIgnoreCase("jpeg") ||
                suffix.equalsIgnoreCase("png")){
            OutputStream os = null;
            InputStream inputStream = null;
            String fileName = (userId + "") + System.currentTimeMillis() + ".jpg";
            String userUrl = savePath+fileName;
            try {
                inputStream = photo.getInputStream();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                byte[] bs = new byte[1024];
                int len;
                // 输出的文件流保存到本地文件
                File tempFile = new File(writePath);
                if (!tempFile.exists()) {
                    tempFile.mkdirs();
                }
                os = new FileOutputStream(tempFile.getPath() + File.separator + fileName);
                // 开始读取
                while ((len = inputStream.read(bs)) != -1) {
                    os.write(bs, 0, len);
                }
                os.flush();
                userService.updateUserUserUrl(userId,userUrl);
                System.out.println(userUrl);
                data.put("userUrl",userUrl);
                data.put("code","success");
                data.put("msg","修改头像成功");
                return data;
            } catch (IOException e) {
                e.printStackTrace();
                data.put("code","error");
                data.put("msg","修改头像失败,请稍后重试!");
                return data;
            } catch (Exception e) {
                e.printStackTrace();
                data.put("code","error");
                data.put("msg","修改头像失败,请稍后重试!");
                return data;
            } finally {
                // 完毕,关闭所有链接
                try {
                    os.close();
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }else {
            data.put("code","error");
            data.put("msg","上传头像格式需要为jpg、jpeg、png!");
            return data;
        }
    }

2. MyWebMvcConfigurerを作成し、springboot2.xによって使用されるリソースマッピングパスを構成します。

@Configuration
public class MyWebAppConfigurer implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**").addResourceLocations("file:F:/images/");
    }
}

3.次に、変更が成功したことがわかります
ここに画像の説明を挿入

元の記事を25件公開しました 賞賛されました4 訪問1516

おすすめ

転載: blog.csdn.net/weixin_39025362/article/details/105512580