Node.js 파일 확장자를 가져옵니다.
express 3을 사용하여 node.js에 파일 업로드 기능을 만듭니다.
이미지 확장자를 가져오고 싶습니다.파일 이름을 변경하고 파일 확장자를 추가할 수 있습니다.
app.post('/upload', function(req, res, next) {
var is = fs.createReadStream(req.files.upload.path),
fileExt = '', // I want to get the extension of the image here
os = fs.createWriteStream('public/images/users/' + req.session.adress + '.' + fileExt);
});
node.js에서 이미지의 확장자를 얻으려면 어떻게 해야 합니까?
파일명의 확장자를 얻기 위해서 다음과 같이 할 수 있다고 생각합니다.
var path = require('path')
path.extname('index.html')
// returns
'.html'
파일명의 모든 확장자를 취득하는 경우(예:filename.css.gz=>css.gz), 다음을 수행합니다.
const ext = 'filename.css.gz'
.split('.')
.filter(Boolean) // removes empty extensions (e.g. `filename...txt`)
.slice(1)
.join('.')
console.log(ext) // prints 'css.gz'
갱신하다
원래 응답 이후 extname()이 에 추가되었습니다.path모듈, "Snowfish 답변" 참조
원답:
파일 확장자를 얻기 위해 이 기능을 사용하고 있습니다.왜냐하면 파일을 쉽게 만들 수 있는 방법을 찾지 못했기 때문입니다(하지만 있다고 생각합니다).
function getExtension(filename) {
var ext = path.extname(filename||'').split('.');
return ext[ext.length - 1];
}
사용하려면 '경로'가 필요합니다.
패스 모듈을 사용하지 않는 다른 방법:
function getExtension(filename) {
var i = filename.lastIndexOf('.');
return (i < 0) ? '' : filename.substr(i);
}
// you can send full url here
function getExtension(filename) {
return filename.split('.').pop();
}
express를 사용하는 경우 미들웨어(bodyParser)를 구성할 때 다음 행을 추가하십시오.
app.use(express.bodyParser({ keepExtensions: true}));
이 기능을 사용하는 것이 훨씬 효율적입니다.substr()대신 방법split()&pop()
퍼포먼스의 차이는, http://jsperf.com/remove-first-character-from-string 를 참조해 주세요.
// returns: 'html'
var path = require('path');
path.extname('index.html').substr(1);
@xentek가 지적한 바와 같이 2019년 8월 갱신substr()이제 레거시 함수로 간주됩니다(MDN 문서).사용할 수 있습니다.substring()대신.의 차이점substr()그리고.substring()두 번째 논거는substr()의 두 번째 인수가 반환되는 동안 반환되는 최대 길이입니다.substring()는 정지하는 인덱스입니다(이 문자는 포함되지 않습니다.또한.substr()는 문자열 끝으로부터의 오프셋으로 사용되는 음의 시작 위치를 받아들입니다.substring()하지 않다.
이 솔루션은 쿼리 스트링을 지원합니다!
var Url = require('url');
var Path = require('path');
var url = 'http://i.imgur.com/Mvv4bx8.jpg?querystring=true';
var result = Path.extname(Url.parse(url).pathname); // '.jpg'
요구가 필요 없는 심플한 솔루션.다중 기간 연장 문제를 해결합니다.
var filename = 'file.with.long.extension';
var ext = filename.substring(filename.indexOf('.'));
//ext = '.with.long.extension'
선행 점이 필요 없는 경우:
var filename = 'file.with.long.extension';
var ext = filename.substring(filename.indexOf('.')+1);
//ext = 'with.long.extension'
파일에 확장자가 있는지 테스트해 주세요.
예를 들어 path.parse(path)를 사용할 수 있습니다.
const path = require('path');
const { ext } = path.parse('/home/user/dir/file.txt');
요청의 Content-Type 헤더를 매핑하는 것도 가능하다고 생각합니다.확장자가 없는 파일을 업로드 하는 경우에도 이 기능은 작동합니다.(요구에 파일명의 확장자가 없는 경우)
HTTP POST 를 사용해 데이터를 송신한다고 가정합니다.
POST /upload2 HTTP/1.1
Host: localhost:7098
Connection: keep-alive
Content-Length: 1047799
Accept: */*
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Content-Type: multipart/form-data; boundary=---- WebKitFormBoundaryPDULZN8DYK3VppPp
Referer: http://localhost:63342/Admin/index.html? _ijt=3a6a054pasorvrljf8t8ea0j4h
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,az;q=0.6,tr;q=0.4
Request Payload
------WebKitFormBoundaryPDULZN8DYK3VppPp
Content-Disposition: form-data; name="image"; filename="blob"
Content-Type: image/png
------WebKitFormBoundaryPDULZN8DYK3VppPp--
여기서 이름 Content-Type 헤더에는 데이터의 MIME 유형이 포함됩니다.이 MIME 유형을 확장자에 매핑하면 파일 확장자 :)가 나타납니다.
Restify BodyParser는 이 헤더를 이름 유형의 속성으로 변환합니다.
File {
domain:
Domain {
domain: null,
_events: { .... },
_eventsCount: 1,
_maxListeners: undefined,
members: [ ... ] },
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
size: 1047621,
path: '/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8',
name: 'blob',
**type: 'image/png'**,
hash: null,
lastModifiedDate: Wed Jul 20 2016 16:12:21 GMT+0300 (EEST),
_writeStream:
WriteStream {
... },
writable: true,
domain:
Domain {
...
},
_events: {},
_eventsCount: 0,
_maxListeners: undefined,
path: '/tmp/upload_2a4ac9ef22f7156180d369162ef08cb8',
fd: null,
flags: 'w',
mode: 438,
start: undefined,
pos: undefined,
bytesWritten: 1047621,
closed: true }
}
이 헤더를 사용하여 확장 매핑(서브스트링 등)을 수동으로 수행할 수 있지만 이를 위한 라이브러리도 준비되어 있습니다.아래 2개는 내가 구글 검색을 했을 때 가장 많이 나온 결과이다.
- 마임
- MIME 타입
사용법도 간단합니다.
app.post('/upload2', function (req, res) {
console.log(mime.extension(req.files.image.type));
}
위의 스니펫은 png을 콘솔에 출력합니다.
확장자를 반환하려면 import extname을 사용합니다.
import { extname } from 'path';
extname(file.originalname);
여기서 file은 형식의 파일 이름입니다.
된 라이너String.prototype:
Object.defineProperty(String.prototype, "ext", {get: function(x) {return this.split('.').pop()}})
str = 'fox.fbx';
str.ext
결과:
path.extname대부분의 경우 효과가 있습니다. 아, 아, 아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아,아.. 및
var path = require('path')
var extname = path.extname('index.html?username=asdf')
// extname contains '.html?username=asdf'
이러한 경우 다음과 같은 작업을 시도해 볼 수 있습니다.
var regex = /[#\\?]/g; // regex of illegal extension characters
var extname = path.extname('index.html?username=asdf');
var endOfExt = extname.search(regex);
if (endOfExt > -1) {
extname = extname.substring(0, endOfExt);
}
// extname contains '.html'
마침표를 번호( 「」등에해 주세요..tar.gz.path.extname.
var fileName = req.files.upload.name;
var arr = fileName.split('.');
var extension = arr[length-1];
다음 함수는 문자열을 분할하고 확장자에 도트가 몇 개 있어도 이름과 확장자를 반환합니다.내선번호가 없는 경우 빈 문자열을 반환합니다.점이나 공백으로 시작하는 이름도 사용할 수 있습니다.
function basext(name) {
name = name.trim()
const match = name.match(/^(\.+)/)
let prefix = ''
if (match) {
prefix = match[0]
name = name.replace(prefix, '')
}
const index = name.indexOf('.')
const ext = name.substring(index + 1)
const base = name.substring(0, index) || ext
return [prefix + base, base === ext ? '' : ext]
}
const [base, ext] = basext('hello.txt')
이거 드셔보세요.
const path = require('path');
function getExt(str) {
const basename = path.basename(str);
const firstDot = basename.indexOf('.');
const lastDot = basename.lastIndexOf('.');
const extname = path.extname(basename).replace(/(\.[a-z0-9]+).*/i, '$1');
if (firstDot === lastDot) {
return extname;
}
return basename.slice(firstDot, lastDot) + extname;
}
// all are `.gz`
console.log(getExt('/home/charlike/bar/file.gz'));
console.log(getExt('/home/charlike/bar/file.gz~'));
console.log(getExt('/home/charlike/bar/file.gz+cdf2'));
console.log(getExt('/home/charlike/bar/file.gz?quz=zaz'));
// all are `.tar.gz`
console.log(getExt('/home/charlike/bar/file.tar.gz'));
console.log(getExt('/home/charlike/bar/file.tar.gz~'));
console.log(getExt('/home/charlike/bar/file.tar.gz+cdf2'));
console.log(getExt('/home/charlike/bar/file.tar.gz?quz=zaz'));
언급URL : https://stackoverflow.com/questions/10865347/node-js-get-file-extension
'source' 카테고리의 다른 글
| 요청 - 404를 받을 수 있는지 확인하는 방법 (0) | 2022.11.21 |
|---|---|
| PHP의 변수에 문자열을 추가할 수 있습니까? (0) | 2022.11.21 |
| MariaDB: 알 수 없는 데이터 유형 "MYSql_JSON" (0) | 2022.11.21 |
| 미포함(약속)TypeError: 'in' 연산자를 사용하여 다음 위치에서 'validateStatus'를 검색할 수 없습니다. (0) | 2022.11.21 |
| 오브젝트 배열에서 중복된 모든 것을 제거하려면 어떻게 해야 합니까? (0) | 2022.11.21 |

