>백엔드 개발 >Golang >Golang gin은 json 데이터와 이미지를 수신합니다.

Golang gin은 json 데이터와 이미지를 수신합니다.

PHPz
PHPz앞으로
2024-02-09 13:09:17616검색

Golang gin接收json数据和图像

php 에디터 Baicao가 Golang gin 프레임워크에서 JSON 데이터와 이미지를 수신하는 방법을 소개합니다. 개발 과정에서 프런트엔드에서 전달된 JSON 데이터와 이미지 파일을 처리해야 하는 경우가 많습니다. Golang의 gin 프레임워크는 이 데이터를 수신하고 처리하는 간단하고 사용하기 쉬운 방법을 제공합니다. 이 글의 소개를 통해 gin 프레임워크의 구조를 사용하여 JSON 데이터를 수신하는 방법과 업로드된 이미지 파일을 처리하는 방법을 알아봅니다. 함께 탐험해 보세요!

질문 내용

요청 핸들러에 대한 코드가 있습니다:

으아악

나는 이 핸들러를 테스트했습니다:

으아악

테스트 중 다음 오류가 발생했습니다. 오류 #01: 숫자 리터럴에 잘못된 문자 '-'가 있습니다

요청 본문은 다음과 같습니다(log.print(req)를 사용하여 인쇄합니다):

으아악

먼저 json 데이터로 문자열만 가지고 바이트로 변환합니다. 오류가 발생했을 때 json.marshal을 사용하여 json 데이터를 변환하는데 성공하지 못했습니다. c.bind를 사용하여 json 데이터를 구문 분석하고 c.formfile을 사용하여 주어진 이미지를 구문 분석하고 싶습니다. 이것이 가능합니까?

업데이트되었습니다. 아바타를 먼저 가져온 다음 바인드 구조를 통해 json을 가져오도록 코드를 교체했습니다. 이제 eof 오류가 발생했습니다.

솔루션

tl;dr

json 데이터와 이미지 파일을 모두 수신하는 구조를 정의할 수 있습니다(필드 레이블 참고).

으아악

gin이 multipart/form-data의 다른 콘텐츠 유형을 자동으로 구문 분석할 수 있나요?

예를 들어 xmlyaml.

현재 진(@1.9.0)은 multipart/form-data 中的 xmlyamljson 很幸运,因为当目标字段是结构体或映射时,gin 恰好使用 json.unmarshal에서 를 자동으로 해결하지 않습니다. json은 대상 필드가 구조체 또는 맵일 때 양식 필드 값을 구문 분석하기 위해 gin이 json.unmarshal을 사용하기 때문에 운이 좋습니다. binding.setwithpropertype

을 참조하세요.

updaterequest.event다음과 같이 직접 구문 분석할 수 있습니다(

는 형식의 문자열 값입니다).

으아악 application/xml 请求中的 yamlapplication/x-yaml 请求中的 xml 混淆。仅当 xml 内容或 yaml 内容位于 中时才需要这样做多部分/表单-data (

로 요청하지 마세요) .

기타
  1. c.bindjson 不能用于从 multipart/form-data 读取 json,因为它假定请求正文以有效的 json 开头。但它是从一个边界开始的,看起来像 --30b24345d...。这就是为什么它失败并显示错误消息 invalid character '-' in numeric literalc.bindjson은 요청 본문이 유효한 json으로 시작한다고 가정하기 때문에
  2. 에서 json을 읽는 데 사용할 수 없습니다. 하지만 --30b24345d...와 같은 경계로 시작됩니다. 이것이 숫자 리터럴의 잘못된 문자 '-' 오류 메시지와 함께 실패하는 이유입니다.
  3. c.formfile("avatar") 之后调用 c.bindjson 不起作用,因为调用 c.formfile 会使整个请求正文被读取。并且 c.bindjson이후에는 읽을 것이 없습니다. 이것이 바로 eof 오류가 나타나는 이유입니다.

단일 실행 가능한 파일의 데모

전체 데모입니다. go test 运行 ./... -v -count 1 사용:

으아악

읽어주셔서 감사합니다!

위 내용은 Golang gin은 json 데이터와 이미지를 수신합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제