Backend code
router.route('http://localhost:5007/api/media')
.post(mediaCtrl.saveMedia)
async saveMedia(req, res) {
let file = req.files.file
let ext = req.body.extension
let path = req.body.path
if(_.isNull(file) || _.isEmpty(file)){
return res.status(400).json({
success:false,
response: null,
message: "El file vacio"
})
}
if(_.isNull(ext) || _.isEmpty(ext)){
return res.status(400).json({
success:false,
response: null,
message: "El campo extension esta vacio"
})
}
if(_.isNull(path) || _.isEmpty(path)){
return res.status(400).json({
success:false,
response: null,
message: "El campo patch esta vacio"
})
}
let fr = new FileReader()
fr.onload = () => {
let fileName = moment().unix().toString() + '_' + file.originalFilename
console.log(fr.result);
let params = {
Bucket: config.s3.bucket,
Body: fr.result,
//ContentEncoding: 'base64',
Key: path + "/" + fileName,
ContentType: file.type,
ACL: 'public-read'
}
s3bucket.putObject(params, async (err, data) => {
if(err) {
return res.json({ success: false, response: err })
}
var url = "https://" + config.s3.bucket + ".s3.amazonaws.com/" + params.Key
console.log('25131',data)
if(data) {
data["url"] = await url
}
return res.json({
success : true,
response : data
})
})
}
fr.onerror = () => {
console.log('read error')
}
fr.readAsArrayBuffer(file)
},
Frontend code
private saveAws() {
const steps: Array<any> = this.structSaveApp.steps;
if (steps[this.step_save] != undefined) {
const options: Array<any> = steps[this.step_save].options;
this.file_list.forEach((file) => {
options.forEach((item) => {
if (file.key === item.key) {
const file_multimedia: File = file.file;
const multimedia: FormData = new FormData();
multimedia.append('file', file_multimedia);
multimedia.append('extension', file_multimedia.type);
multimedia.append('path', this.user_id);
this.spinner.show();
// var object = {};
// multimedia.forEach((value, key) => object[key] = value);
// var json:any = JSON.stringify(object);
// console.log('saveAWS file',object);
this.appsService.saveAWS(multimedia).subscribe((response) => {
console.log(response);
item.value = response.response.url;
this.spinner.hide();
}, (error) => {
console.log(error);
this.spinner.hide();
});
}
});
});
}
}
service
public saveAWS(data: FormData): Observable<any> {
let headers = new HttpHeaders({
});
return this.http.post('http://localhost:5007/api/media', data, { headers: headers });
}
当我尝试从前端上传到后端时,它给了我一个错误,如意外令牌 - 在 JSON.parse () 的位置 0 处出错 你能请任何人帮助我吗...................................... ....................
error:SyntaxError: Unexpected token - JSON 中的位置 0 在 JSON.parse() 在 createStrictSyntaxError (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\types\json.js:158:10) 在解析 (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\types\json.js:83:15) 在 C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\body-parser\lib\read.js:121:18 在 invokeCallback (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:224:16) 完成后 (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:213:7) 在 IncomingMessage.onEnd (C:\Users\THIPPESH_PANI\Downloads\QudraforceBackend\backend\socialtools-api-media\src\node_modules\raw-body\index.js:273:7) 在 IncomingMessage.emit (events.js:327:22) 在 IncomingMessage.EventEmitter.emit (domain.js:483:12) 在 endReadableNT (_stream_readable.js:1220:12) 在 processTicksAndRejections (internal/process/task_queues.js:84:21)
private saveAws() {
const steps: Array<any> = this.structSaveApp.steps;
if (steps[this.step_save] != undefined) {
const options: Array<any> = steps[this.step_save].options;
this.file_list.forEach((file) => {
options.forEach((item) => {
if (file.key === item.key) {
const file_multimedia: File = file.file;
const multimedia: FormData = new FormData();
multimedia.append('file', file_multimedia);
multimedia.append('extension', file_multimedia.type);
multimedia.append('path', this.user_id);
this.spinner.show();
// this.appsService.saveAWS(multimedia).subscribe((response) => {
// console.log(response);
// item.value = response.response.url;
// this.spinner.hide();
// }, (error) => {
// console.log(error);
// this.spinner.hide();
// });
let url = environment.API_BASE.CORE_MEDIA
let req =new Request(url,{
body:multimedia,
method:'POST'
});
fetch(req)
.then((response) =>response.json())
.then((response) =>{
item.value = response.response.url,
this.spinner.hide();
})
.catch((error)=>{
console.log(error);
this.spinner.hide();
})
}
});
});
}
}
实际上我向后端发送了无效的 json 数据,因此在解析 json 时出现错误。现在我已经使用 fetch 和 post 方法解决了我的问题