【问题标题】:How to upload file on DreamFactory?如何在 DreamFactory 上上传文件?
【发布时间】:2017-03-13 07:26:54
【问题描述】:

如何在 DreamFactory 上使用 multipart 上传图片?

我正在使用 angualr2,尝试过 xhr 和 http.post。两者都不起作用我得到 201 状态代码并返回空资源。文件只是说

POST http://{url}/api/v2/{storage_service_name}

Request header:
...
Content-Type: multipart/form-data;
...

Request payload:
-- <file content> --

没有明确的解释

【问题讨论】:

    标签: dreamfactory


    【解决方案1】:

    也一直在尝试解决这个问题,但文档确实没有太大帮助。这是我最终使用的

    如下创建了一个组件。路径输入表示已在文件服务上创建的文件夹。如果文件夹不存在,代码仍然需要重构以创建文件夹,但到目前为止这工作。

    import { Component, ElementRef, Input, ViewChild } from '@angular/core';
    import { Headers, Http } from '@angular/http';
    
    import * as constants from '../shared/config';
    @Component({
        selector: 'file-upload',
        template: '<input type="file" #fileInput>'
    })
    export class FileUploadComponent {
        @Input() multiple: boolean = false;
        @Input() path: string = '';
        @ViewChild('fileInput') inputEl: ElementRef;
        baseResourceUrl: string = constants.API_BASE_URL + '/api/v2/files/';
    
        constructor(private http: Http) {}
        upload() {
            console.log("changed");
            let inputEl: HTMLInputElement = this.inputEl.nativeElement;
            let fileCount: number = inputEl.files.length;
            let fileName: string = '';
            console.log(inputEl.files);
            let formData = new FormData();
            if (fileCount > 0) { // a file was selected
                formData.append('files[]', inputEl.files.item(0), inputEl.files.item(0).name);
                formData.append('pmCase', '100');
                fileName = inputEl.files.item(0).name;
                let myHeader = new Headers();
                let token = localStorage.getItem('session_token');
                myHeader.append('Content-Type', 'multipart/form-data');
                myHeader.append('X-Dreamfactory-API-Key', 'xxxxxxxxxxx');
                myHeader.append('X-Dreamfactory-Session-Token', token);
                this.http
                    .post(`${this.baseResourceUrl + this.path + fileName}`, formData, { headers: myHeader })
                    .map((resp) => resp.json())
                    .subscribe((uploadResp) => {
                        console.log(uploadResp);
                    }, (error) => console.error(error));
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      您应该检查文件的 html 输入名称是否为“files” - 文件字段的任何其他名称都不会上传内容。此外,您需要将其发布到您希望存储文件的目录或路径。假设目录已经存在,它应该按预期上传文件。祝你好运!

      【讨论】:

        猜你喜欢
        • 2018-09-22
        • 1970-01-01
        • 1970-01-01
        • 2012-03-23
        • 2015-11-24
        • 2017-04-04
        • 2017-06-21
        • 2013-07-28
        • 1970-01-01
        相关资源
        最近更新 更多