【问题标题】:Insert Image to database using typescript (angular2) and spring boot (spring data)使用 typescript (angular2) 和 spring boot (spring data) 将图像插入数据库
【发布时间】:2016-11-06 00:52:26
【问题描述】:

我首先向我的客户端展示服务

    addImage (url: string, params: string[], files: File[]): Observable {
                return Observable.create(observer => {
                    let formData: FormData = new FormData(),
                        xhr: XMLHttpRequest = new XMLHttpRequest();

                    for (let i = 0; i < files.length; i++) {
                        formData.append("uploads[]", files[i], file

s[i].name);
                }

                xhr.onreadystatechange = () => {
                    if (xhr.readyState === 4) {
                        if (xhr.status === 200) {
                            observer.next(JSON.parse(xhr.response));
                            observer.complete();
                        } else {
                            observer.error(xhr.response);
                        }
                    }
                };

                xhr.upload.onprogress = (event) => {
                    this.progress = Math.round(event.loaded / event.total * 100);

                    this.progressObserver.next(this.progress);
                };

                xhr.open('POST', url, true);
                xhr.send(formData);
            });

    }

那么这是我的html代码

<input type="file" (change)="uploadImage($event)"/>

我从我的组件中调用这个方法的地方

uploadImage(event) {
        var files = event.srcElement.files;
        console.log(files);
        this._serviceSection.addImage('http://localhost:8080/template/img', [], files).subscribe(() => {
            console.log('sent');
        });
    }

在我的服务端

这是来自我的控制器的方法

@RequestMapping(value = "/img", method = RequestMethod.POST)
    public void getFileContents(@RequestParam MultipartFile file) {
        System.out.println("++++++++++++++++++++++++++++++++++++++++ " +file.getOriginalFilename());
    }

第一次尝试显示文件名,但出现此错误

【问题讨论】:

    标签: rest file-upload angular spring-boot spring-data


    【解决方案1】:

    您的progressObserver 似乎没有设置。原因可能是您没有订阅其关联的 observable。不要忘记 observables 是惰性的,如果你不订阅它们,它们的初始化回调不会被调用。

    为防止出现错误,您可以检查它是否为空:

    xhr.upload.onprogress = (event) => {
      if (this.progressObserver) {
        this.progress = Math.round(event.loaded / event.total * 100);
    
        this.progressObserver.next(this.progress);
      }
    };
    

    否则,您会注意到,从 RC2 开始,Angular2 接受 FormData 对象作为 HTTP 方法的参数...

    【讨论】:

    • 在上传和使用FormData作为body的时候,如何使用Http服务方法获取onprogress回调?
    猜你喜欢
    • 2020-02-21
    • 2018-01-13
    • 1970-01-01
    • 2018-03-13
    • 2018-11-14
    • 2015-10-07
    • 2019-12-02
    • 2018-08-06
    • 1970-01-01
    相关资源
    最近更新 更多