- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我面临一个我认为不起作用的问题。
我确实以 Angular 安装了一个库 cropper.js
https://github.com/matheusdavidson/angular-cropperjs
在前端,我正在处理开发人员开发这个库的一些代码。
所以我的迭代将是这样的。
裁剪后的图像将被发送到后端的我的 api 并在那里保存文件并在其他地方显示文件。
实际裁剪它保存了与 blob 的链接,还有我的 img。
发布请求它可以工作,我可以看到文件夹中存在 img 但是当我尝试获取图像时它可以工作,但是在前端的控制台中它告诉我。GET http://localhost:4200/images/image-1607708300007.jpg 404 (Not Found)
但在 GET
请求它是那里的图像。
{"_id":"5fd3bf6f946e9c40163d82f3",
"imageTitle":"undefined",
"imageDesc":"undefined",
"imageUrl":"/images/image-1607712623266.jpg",
"uploaded":"2020-12-11T18:50:23.288Z","__v":0}
但是,如果我尝试使用 postman 来获取它,它就无法正常工作。
http://localhost:4200/images/image-1607713934301.jpg
它与控制台中的错误消息相同。
`<pre>Cannot GET /images/image-1607713934301.jpg</pre>`
如果我尝试记录它发送到后端的前端的内容,我确实有类似的东西。
console.log(req.file);
{ fieldname: 'file',
originalname: 'acf6a796-7b4b-4b12-b429-1d21352f3a45.jpeg',
encoding: '7bit',
mimetype: 'image/jpeg',
destination: '/Users/abedinzhuniqi/Projects/xxxx/images',
filename: 'image-1607712623266.jpg',
path:
'/Users/abedinzhuniqi/Projects/xxxx/images/image-1607712623266.jpg',
size: 1540633 }
这是我的前端代码。
<angular-cropper #angularCropper
[cropperOptions]="imgConfig"
[imageUrl]="imgUrl | safeurl"></angular-cropper>
<div class="btn-group">
<label class="btn btn-primary btn-upload" for="inputImage" title="Upload image file" >
<input type="file" class="sr-only" id="inputImage" name="file" accept="image/*" (change)="fileChangeEvent($event)">
<span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="Import image with Blob URLs">
<span class="fa fa-upload"></span>
</span>
</label>
</div>
<button type="button" class="btn btn-primary" data-method="crop" title="Crop" (click)="saveImage()">
<span class="docs-tooltip" data-toggle="tooltip" title="" data-original-title="cropper.crop()">
<span class="fa fa-check"></span>
</span>
</button>
这是我的 TS。
imgUrl = "";
image: Image;
imageURL;
imgConfig = {
aspectRatio : 3/4,
dragMode : "move",
background : true,
movable: true,
rotatable : true,
scalable: true,
zoomable: true,
viewMode: 1,
checkImageOrigin : true,
checkCrossOrigin: true
};
fileChangeEvent(event: any): void {
this.imgUrl = URL.createObjectURL(event.target.files[0]);
this.image = event.target.files[0];
}
saveImage() {
console.log(this.image);
const file = new File([this.imgUrl], this.image.type);
this.imageService.addImage(this.image, file).subscribe((res: any) => {
if (res.body) {
this.imageService.getImageByID(res.body._id).subscribe((t: Image) => {
this.imageURL = t.imageUrl;
});
}
}, (err: any) => {
console.log(err);
});
}
这是服务
export class ImageService {
apiUrl = environment.backend;
constructor(private http: HttpClient) { }
addImage(image: Image, file: File): Observable<any> {
const formData = new FormData();
formData.append("file", file);
formData.append("imageTitle", image.imageTitle);
formData.append("imageDesc", image.imageDesc);
const header = new HttpHeaders();
const params = new HttpParams();
const options = {
params,
reportProgress: true,
headers: header
};
const req = new HttpRequest("POST", this.apiUrl, formData, options);
return this.http.request(req);
}
getImageByID(id: string): Observable<any> {
const url = `${this.apiUrl}/${id}`;
return this.http.get<Image>(url).pipe(
catchError(this.handleError)
);
}
private handleError(error: HttpErrorResponse): any {
if (error.error instanceof ErrorEvent) {
console.error('An error occurred:', error.error.message);
} else {
console.error(
`Backend returned code ${error.status}, ` +
`body was: ${error.error}`);
}
return throwError(
'Something bad happened; please try again later.');
}
}
我的后端 API 看起来像这样。
const multer = require('multer');
const Image = require("../models/image");
const storage = multer.diskStorage({
destination: (req, file, cb) => {
console.log(cb);
cb(null, path.join(__dirname, '../../../../images'));
},
filename: (req, file, cb) => {
var filetype = '';
if(file.mimetype === 'image/gif') {
filetype = 'gif';
}
if(file.mimetype === 'image/png') {
filetype = 'png';
}
if(file.mimetype === 'image/jpeg') {
filetype = 'jpg';
}
cb(null, 'image-' + Date.now() + '.' + filetype);
}
});
const upload = multer({storage: storage});
routes.get('/:id', function(req, res, next) {
Image.findById(req.params.id, function (err, gallery) {
if (err) return next(err);
res.json(gallery);
});
});
// post data
routes.post('/', upload.single('file'), function(req, res, next) {
if(!req.file) {
return res.status(500).send({ message: 'Upload fail'});
} else {
req.body.imageUrl = req.file.filename;
Image.create(req.body, function (err, image) {
if (err) {
console.log(err);
return next(err);
}
res.json(image);
});
}
});
最佳答案
您的服务器应该发送图像内容。目前,您只响应包含图像路径的 JSON,而不是图像本身。为此,您需要添加 static文件中间件:
app.use('/images', express.static(path.join(process.cwd(), '../images'))
然后你应该让你的主机产生正确的 URL,你需要像这样更新从服务器返回的对象:
routes.get('/:id', function(req, res, next) {
Image.findById(req.params.id, function (err, gallery) {
if (err) return next(err);
res.json({
...gallery.toJSON(),
imageUrl: `//${req.host}:${req.port}/${gallery.imageUrl}`,
});
});
});
因此,您将为您提供静态内容并在前端接收正确的 URL。
关于javascript - 使用 Multer 将图像保存在 MongoDB 后端作为来自 Angular 的文件,它无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65157477/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!