router.prefix('/upload');
//文件上传
//配置
var storage = multer.diskStorage({
//文件保存路径
destination: function (req, file, cb) {
cb(null, __dirname+ '../upload/')
},
//修改文件名称
filename: function (req, file, cb) {
var fileFormat = (file.originalname).split(".");
cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]);
}
})
//加载配置
var upload = multer({ storage: storage });
//路由
router.post('/upLoadDoc', upload.single('file'), async (ctx, next) => {
console.log(ctx.request)
ctx.body = {
filename: ctx.request.body.files.file.name//返回文件名
}
好吧,我是让前端上传图片。这种事情就不要增加我服务器的负载了。。。 我让客户端上传到sm.ms这个网站,然后他返回给我一个图片地址。。我数据库也只储存这个地址。。
@pengliheng 但是这有个问题,比如你要传到七牛云,那么,照你的流程,提交的所有过程都在前端,那我检查你的代码是不是就可以用你的七牛呢!
额,我是传图片到sm.ms这个网站,免费的。。 如果你想做上传图片到7牛实现cdn加速的化,确实存在key暴露的问题。。。。 前端上传图片需要 new FormDate()一个对象,然后把上传的file,push到这个新建的对象里面,,,不知道后端上传7牛的步骤是不是也一样?? var data = new FormData() this.setState({ files:e.target.files[0] }) data.append(“smfile”, this.state.files) fetch(‘https://sm.ms/api/upload’, { method: ‘POST’, body: data }).then( response => response.json() ).then( success => { this.state.socket.emit(‘send message’,{ size:this.state.files.size, imageUrl:success.data.url, avatorUrl:this.state.documentCookie.avatorUrl, time:this.state.time }); } )
@lfz900824 七牛会有权限验证
@hi363138911 我没用过七牛,只是按照你的逻辑,图片直接保存七牛,不通过后台,那你所有的权限认证也都是前段html提交的,只有图片是随机的,那不还是一样别人可以拿到你的权限认证么
@lfz900824 按照七牛文档是需要我们自己的后端给验证的,如果全部放在前端,会出现你所说的问题。
客户端(移动端或者Web端)上传文件的时候,需要从客户自己的业务服务器获取上传凭证,而这些上传凭证是通过服务端的SDK来生成的,然后通过客户自己的业务API分发给客户端使用。根据上传的业务需求不同,七牛云Node.js SDK支持丰富的上传凭证生成方式。
前端上传图片到七牛可能是疯了
@pengliheng 上传不是自己做的啊
我cdn加速没 做好,,所以就直接传别人服务器去了。。也省的存了。。