장기 여행을 준비하고 있다. 인생의 큰 전환점이 될 것 같다.
물론 다녀오기전에 쏟아내는 이 모든 말들은 설레발이다.
그럼에도 불구하고 일단 던진다.
오늘이 이 여행의 시작이다!
그렇다고 내가 지금 여행을 간다는 얘기는 아니다.
그냥 오늘부터 여행기를 쓴다는 얘기다.
오해하지 말길.. .ㅋ
장기 여행을 준비하고 있다. 인생의 큰 전환점이 될 것 같다.
물론 다녀오기전에 쏟아내는 이 모든 말들은 설레발이다.
그럼에도 불구하고 일단 던진다.
오늘이 이 여행의 시작이다!
그렇다고 내가 지금 여행을 간다는 얘기는 아니다.
그냥 오늘부터 여행기를 쓴다는 얘기다.
오해하지 말길.. .ㅋ
썸머노트에서 이미지를 서버에 올리려면 일단 아래와 같이 별도의 onImageUpload 핸들러를 구현해야한다.
var $editor = $('#editor');
var editor = $editor.summernote({
... 옵션 생략 ...
onImageUpload: function(files) {
sendFile(files[0]);
}
});
위에서 사용한 sendFile 함수는 아래와 같이 구현한다. 이때 ajax 옵션에 주의하자. 별거아닌 옵션을 실수로 잘못주면 하루종일 이유도 모르고 헤맬수있다. 특히 contentType은 없어야한다. 파일 업로드라고 종종 contentType을 “multipart/form-data”로 설정하는 경우가 있는데, 본래 XMLHttpRequest 객체는 파일 업로드를 지원하지 않기 때문에 파일 업로드를 위해서는 XHR2와 FormData 객체를 이용해야한다. 참고로 XHR2는 거의 모든 최신 브라우저에서 사용할수있다.
function sendFile(file) {
var data = new FormData();
data.append("file", file);
$.ajax({
type: "POST",
url: "/api/upload/image",
type: 'POST',
data: data,
contentType: false,
processData: false, // Don't process the files
success: function(data) {
$('#editor').summernote("insertImage", data.url);
}
});
}
간혹 no multipart boundary was found 라는 오류가 발생하면 바로 컨텐츠 타입을 의심해보면 된다.
이제 파일을 업로드를 해줄 서버를 구현해보자. 노드로 구현할때 나는 주로 쓰는 multer라는 모듈을 사용한다. 사용법 또한 무지 간단하다.
var router = express.Router();
var multer = require('multer');
var upload = multer({
dest: 'uploads/'
});
router.post('/upload/image', upload.single('file'), function(req, res){
console.log(req.file);
});
하지만 간단하다고 생각할때 아래와 같은 에러를 만나게 된다.
위 두 에러는 ajax로 파일을 업로드할때 파일내용을 request body에 써버 보내게 되는데 바로 그 바디의 크기 제한에 걸려나 나는 문제다. 이럴땐 당황하지 말고 아래와 같이 설정한다.
app.use(bodyParser.urlencoded({limit: '5mb', extended: false, parameterLimit: 10000}));
물론 node 앞딴에 Nginx 같은 스태틱 서버를 두는 경우엔 nginx 설정에도 업로드 사이즈를 설정해야한다.
관련글은 검색하면 쉽게 찾을수있다.
http {
#...
client_max_body_size 100m;
#...
}
라텍스 효과를 보려면 3cm 이상은 되어야한다. 천연은 비싸고 보통은 합성 라텍스다.
침대나 쇼파 광고를 할때는 라섹트가 들어가 있다고만 하지 실제로 얼마나 들어가있는지 그리고 얼마나 두껍게 들어가 있는지 천연인지 합성인지 애매모하게 표기하고 광고한다. 속지말고 잘 알아보고 사든지 아예 사지를 말자!