inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정3판] Node.js 교과서 - 기본부터 프로젝트 실습까지

S3에 대신 파일 올리기

Error: Data too long for column

630

김명재

작성한 질문수 10

0

req.file을 보면 아래와 같이 나옵니다.
{

fieldname: 'img',

originalname: 'á\x84\x89á\x85³á\x84\x8Fá\x85³á\x84\x85á\x85µá\x86«á\x84\x89á\x85£á\x86º 2023-11-22 á\x84\x8Bá\x85©á\x84\x92á\x85® 8.36.00.png',

encoding: '7bit',

mimetype: 'image/png',

size: 156946,

bucket: 'whatsup1',

key: 'original/1700700649389_á\x84\x89á\x85³á\x84\x8Fá\x85³á\x84\x85á\x85µá\x86«á\x84\x89á\x85£á\x86º 2023-11-22 á\x84\x8Bá\x85©á\x84\x92á\x85® 8.36.00.png',

acl: 'private',

contentType: 'application/octet-stream',

contentDisposition: null,

contentEncoding: null,

storageClass: 'STANDARD',

serverSideEncryption: null,

metadata: undefined,

location: 'https://whatsup1.s3.ap-northeast-2.amazonaws.com/original/1700700649389_%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%B3%C3%A1%C2%84%C2%8F%C3%A1%C2%85%C2%B3%C3%A1%C2%84%C2%85%C3%A1%C2%85%C2%B5%C3%A1%C2%86%C2%AB%C3%A1%C2%84%C2%89%C3%A1%C2%85%C2%A3%C3%A1%C2%86%C2%BA%202023-11-22%20%C3%A1%C2%84%C2%8B%C3%A1%C2%85%C2%A9%C3%A1%C2%84%C2%92%C3%A1%C2%85%C2%AE%208.36.00.png',

etag: '"9afb9409e1bcd41269629b6bb1100245"',

versionId: undefined

}
제로초님은 사진 파일 확장자가 jpg로 뜨는데 저는 png로 뜹니다..

s3에 저장되는 쪽이 아니라 사진을 파일로 만드는 부분에서 문제가 있는 것 같은데 어느부분에서 손을 봐야할지 잘 모르겠습니다..

const { S3Client } = require("@aws-sdk/client-s3");
const multerS3 = require("multer-s3");

const s3 = new S3Client({
  credentials: {
    accessKeyId: process.env.S3_ACCESS_KEY_ID,
    secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
  },
  region: "ap-northeast-2",
});

const upload = multer({
  storage: multerS3({
    s3,
    bucket: "whatsup1",
    key(req, file, cb) {
      cb(null, `original/${Date.now()}_${file.originalname}`);
    },
  }),
  limits: { fileSize: 5 * 1024 * 1024 },
});

그리고 추가적인 질문이 있는데 localhost로 서버를 작동시킬때 db는 잘 보이는데 lightsail로 작동시킨 db가 보이지 않습니다..
mysql connection 추가 버튼 눌러서 hostname을 aws에서 제공해준 ip로 바꾸면 되는거 아닌가요?
그런데 그렇게 하고 연결을 하니깐 버퍼링이 걸리면서 연결이 되지 않습니다..

node.js mysql mongodb express typescript socket.io jwt

답변 1

0

제로초(조현영)

일단 파일명이 한글이라 인코딩과정에서 너무 길어져서 그렇습니다. 파일명 저장하는 컬럼 길이를 늘리셔야 합니다.(sql 필요) 그리고 png 파일을 업로드하신 거 맞나요?

aws db가 접근이 안 된다면 보안그룹에서 인바운드 3306 포트 허용하셔야 합니다.

0

김명재

Data too long error는 table에서 column length를 늘려서 해결했습니다.

그리고 찾아보니깐 db가 lightsail인스턴스 내에 있을때는 인스턴스 방화벽 오픈만 해주면 된다고 해서
스크린샷 2023-11-23 오후 2.02.20.png방화벽 오픈 해주고 실행했는데
workbench에서 아래와 같은 에러를 보여줬습니다.
Cannot Connect to Database Server

Your connection attempt failed for user 'root' to the MySQL server at 13.125.223.66:3306:

Host '116.33.131.91' is not allowed to connect to this MySQL server

Please:

1 Check that MySQL is running on address 13.125.223.66

2 Check that MySQL is reachable on port 3306 (note: 3306 is the default, but this can be changed)

3 Check the user root has rights to connect to 13.125.223.66 from your address (MySQL rights define what clients can connect to the server and from which machines) 

4 Make sure you are both providing a password if needed and using the correct password for 13.125.223.66 connecting from the host address you're connecting from

보니깐 mysql 권한이 root사용자에게 부여 됐는지 살펴보라는 말이 있어서

입력해서 확인해보니깐
+------------------+-----------+

| user             | host      |

+------------------+-----------+

| mysql.infoschema | localhost |

| mysql.session    | localhost |

| mysql.sys        | localhost |

| root             | localhost |

+------------------+-----------+

4 rows in set (0.01 sec)

 

mysql> SHOW GRANTS FOR 'root'@'localhost';

+------------------------------------------------------------------------------------------------------------------------------------------------------------+

| Grants for root@localhost                                                                            |

+------------------------------------------------------------------------------------------------------+

| GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE, CREATE ROLE, DROP ROLE ON . TO root@`localhost` WITH GRANT OPTION                                              

| GRANT APPLICATION_PASSWORD_ADMIN,AUDIT_ABORT_EXEMPT,AUDIT_ADMIN,AUTHENTICATION_POLICY_ADMIN,BACKUP_ADMIN,BINLOG_ADMIN,BINLOG_ENCRYPTION_ADMIN,CLONE_ADMIN,CONNECTION_ADMIN,ENCRYPTION_KEY_ADMIN,FIREWALL_EXEMPT,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,GROUP_REPLICATION_ADMIN,GROUP_REPLICATION_STREAM,INNODB_REDO_LOG_ARCHIVE,INNODB_REDO_LOG_ENABLE,PASSWORDLESS_USER_ADMIN,PERSIST_RO_VARIABLES_ADMIN,REPLICATION_APPLIER,REPLICATION_SLAVE_ADMIN,RESOURCE_GROUP_ADMIN,RESOURCE_GROUP_USER,ROLE_ADMIN,SENSITIVE_VARIABLES_OBSERVER,SERVICE_CONNECTION_ADMIN,SESSION_VARIABLES_ADMIN,SET_USER_ID,SHOW_ROUTINE,SYSTEM_USER,SYSTEM_VARIABLES_ADMIN,TABLE_ENCRYPTION_ADMIN,TELEMETRY_LOG_ADMIN,XA_RECOVER_ADMIN ON . TO root@`localhost` WITH GRANT OPTION |

| GRANT PROXY ON ``@`` TO root@`localhost` WITH GRANT OPTION                                            

+------------------------------------------------------------------------------------------------------------------------+

3 rows in set (0.01 sec)

이런식으로 나오는데 이게 권한을 가지고 있는게 맞나요?... 제가 아직은 sql을 잘 몰라서요..
일단 gpt한테 물어보니깐 권한이 잘 부여되어있다고는 하는데 .혹시 더 설정 해야 할게 있나요?

0

제로초(조현영)

https://stackoverflow.com/a/8348560

localhost면 안 되고 % 이어야 합니다.

0

제로초(조현영)

https://stackoverflow.com/a/11225588

이게 좀 더 맞겠네요

0

김명재

mysql> CREATE USER 'root'@'%' IDENTIFIED BY 'zzx13579';

Query OK, 0 rows affected (0.01 sec)

 

mysql> GRANT ALL PRIVILEGES ON . TO 'root'@'%' WITH GRANT OPTION;

Query OK, 0 rows affected (0.01 sec)

| user             | host      |

+------------------+-----------+

| root             | %         |

| mysql.infoschema | localhost |

| mysql.session    | localhost |

| mysql.sys        | localhost |

| root             | localhos


잘 실행이 된 것 같은데 계속 오류가 발생하네요.. 권한 문제가 아닌 것 같습니다..

궁금한게

| root             | localhos

| root             | %         |

둘다 localhost를 나타내는것 같은데 어떻게 다른건가요?

0

제로초(조현영)

localhostlocalhost(라이트세일 내부)에서만 db 접근 가능하다는 뜻이고 %는 모든 곳에서 접근 가능하다는 뜻입니다. root@localhost를 지워야하나 싶기도 하네요.

깃헙 질문

0

82

2

강의 1-1 수업노트의 로드맵 링크가 작동하지 않습니다.

0

76

1

aws - lightsail 이용 관련

0

58

1

4강 http 서버 만들때 ESM방식으로 해도 될까요?

0

81

2

모듈 사용 시 단점이 있나요?

0

81

1

node.js 버전 및 typescript 적용 문의

0

93

2

12.7. 방장기능(강퇴) 질문드립니다.

0

80

2

12.7 socket.js코드 그대로 뱃겨서 했는데, socket.request.session.color가안나오네요

0

69

1

12.7 코드 그대로 뱃겨서 햇는데 스샷같이 오류가뜹니다.

0

75

2

12.7.1스스로 해보기 질문되나요

0

95

3

시퀄라이즈 실습하기 질문드립니다.

0

196

9

<7-5. 시퀄라이즈 사용하기>수업 질문 드립니다.

0

97

2

크롬에서 user id를 인풋에 입력하고 등록하면 404 에러처리 페이지가 뜹니다.

0

113

2

구매 결제관련 질문입니다 !

0

122

1

다수의 supertest 가 실행될 때 force:true로 인한 DB 초기화 문제

0

133

2

node 설치 방법이 전혀다르게 바뀐것 같습니다.

0

152

2

12강 깃허브에 있는 12.7 chat.html 복붙했는데 css오류

0

122

2

무료/프리미엄 동시 소유 시 질문

0

117

1

비주얼 스튜디오 코드로 계속 진행해도 괜찮을까요?

0

135

2

10강 cors에러 localhost:4000으로 접속했을때 에러

1

159

2

webstorm 해결할 수 없는 변수 문제

0

155

2

혹시 몽고DB 쓸거면 MySQL 강의 스킵해도 되나요?

0

149

2

LightSail 실행 중 오류 질문드립니다!

0

204

2

RedisStore 사용법 질문

0

133

2