首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用json服务器rest api上传angular 7的头像

使用json服务器rest api上传angular 7的头像
EN

Stack Overflow用户
提问于 2019-03-12 17:56:25
回答 2查看 2.5K关注 0票数 0

我使用Json server和模块HttpClient创建了一个带有angular的crud应用程序,我在一个名为db.json的json文件中编写了一个contact对象。

代码语言:javascript
复制
{"contact": [
{
  "name": "",
  "email": "",
  "phone": "",
  "image": "",
  "id": 1
},
{
  "name": "",
  "email": "",
  "phone": "",
  "image": "",
  "id": 2}]}

但不幸的是,我不知道如何从带有angular的输入文件标签上传图像文件。ContactCreateComponent允许我使用一种方法来创建从restApiService导入联系人对象。

代码语言:javascript
复制
import { Component, OnInit, Input } from '@angular/core';
import { Router } from '@angular/router';
import { RestApiService } from "../shared/rest-api.service";

@Component({
  selector: 'app-contact-create',
  templateUrl: './contact-create.component.html',
  styleUrls: ['./contact-create.component.css']
})
export class ContactCreateComponent implements OnInit {
  @Input() contactDetails = { name: '', email: '', phone:"",image:"" }
 
  constructor( public restApi: RestApiService, 
    public router: Router,) {
    }

  ngOnInit() {
  }
  addContact(dataContact) {
    this.restApi.createContact(this.contactDetails).subscribe((data: {}) => {
      this.router.navigate(['/contact-list'])
    })
  }
}

以下是我的restApiService源代码:

代码语言:javascript
复制
import { Injectable } from '@angular/core';
import { HttpClient,HttpHeaders } from '@angular/common/http';
import { Contact } from '../shared/contact';
import { Observable,throwError } from 'rxjs';
import { retry, catchError } from 'rxjs/operators';
@Injectable({
  providedIn: 'root'
})
export class RestApiService {
  apiURL ="http://localhost:3000"
  constructor(private http:HttpClient) { }

  
  httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json'
    })
  }  

  getContacts(): Observable<Contact> {
    return this.http.get<Contact>(this.apiURL + '/contact')
    .pipe(
      retry(1),
      catchError(this.handleError)
    )
  }
  getContact(id): Observable<Contact> {
    return this.http.get<Contact>(this.apiURL + '/contact/' + id)
    .pipe(
      retry(1),
      catchError(this.handleError)
    )
  }  

  createContact(Contact): Observable<Contact> {
    return this.http.post<Contact>(this.apiURL + '/contact', JSON.stringify(Contact), this.httpOptions)
    .pipe(
      retry(1),
      catchError(this.handleError)
    )
  }  
  updateContact(id, Contact): Observable<Contact> {
    return this.http.put<Contact>(this.apiURL + '/contact/' + id, JSON.stringify(Contact), this.httpOptions)
    .pipe(
      retry(1),
      catchError(this.handleError)
    )
  }
  deleteContact(id){
    return this.http.delete<Contact>(this.apiURL + '/contact/' + id, this.httpOptions)
    .pipe(
      retry(1),
      catchError(this.handleError)
    )
  }


  handleError(error) {
    let errorMessage = '';
    if(error.error instanceof ErrorEvent) {
      // Get client-side error
      errorMessage = error.error.message;
    } else {
      // Get server-side error
      errorMessage = `Error Code: ${error.status}\nMessage: ${error.message}`;
    }
    window.alert(errorMessage);
    return throwError(errorMessage);
 }
}

谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-03-12 18:18:33

要上传图像,您必须使用FormData。

服务方法,如:

代码语言:javascript
复制
public uploadImage(image: File): Observable<Response> {
   const formData = new FormData();

   formData.append('image', image);

   return this.http.post('/api/v1/image-upload', formData);
 }

调用此方法和一个图像参数传递从输入字段获取的文件对象。

像这样:

代码语言:javascript
复制
var file = document.getElementById('myFile').files[0];

或者在发生输入类型文件的更改事件时,您可以这样做:

代码语言:javascript
复制
fileChangeEvent(event: any): void {
  let file =  event.target.files[0];

 }
票数 0
EN

Stack Overflow用户

发布于 2019-03-12 18:23:57

您需要创建一个自定义指令来转换要绑定到表单域的选定文件。

请检查此代码并将此指令添加到您的应用程序https://gist.github.com/sheikalthaf/85c19d41bccf218d6bc962daa75a7943

之后,将ngu-file-ref属性添加到您的input[type="file"],然后检查您的表单值,您将在字段中获得文件格式

然后在将数据发送到api之前,将其转换为formData https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55118610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档