2017-10-17 4 views
0

TypeScriptのFileを含むput要求をNancyのHttpFileにバインドしようとしています。要求は常にC#のHttpFileをnullに設定します。これを行う方法はありますか?Javascript形式のファイルをHttpFileを含むNancyモデルにバインドするにはどうすればよいですか?

@Injectable() 
export class FileUploadService { 

    @Output() progress: EventEmitter<number> = new EventEmitter<number>(); 

    /** 
    * uploads a file to the service and returns the document's id 
    */ 

    public upload(req: IUploadRequest): Observable<number> { 

let promise = new Promise((resolve: any, reject: any) => { 

    let xhr: XMLHttpRequest = new XMLHttpRequest(); 

    xhr.upload.onprogress = (event: any) => { 
    let progress = Math.round(event.lengthComputable ? event.loaded * 100/event.total : 0); 
    this.progress.emit(progress); 
    }; 

    xhr.onload =() => { 
    let json = JSON.parse(xhr.response); 
    resolve(<number>json.documentId); 
    }; 

    xhr.onerror =() => { 
    reject(xhr.response); 
    }; 

    xhr.onabort =() => { 
    reject(xhr.response); 
    }; 

    xhr.open("PUT", `${environment.API_ROOT}/document`, true); 
    xhr.setRequestHeader(environment.AUTH_HEADER_NAME, getToken()); 
    let formData: FormData = new FormData(); 
    formData.append("file", <File>req.file, req.file.name); 

    formData.append("description", req.description); 
    formData.append("chapterId", req.chapterId.toString()); 
    xhr.send(formData); 
}); 

return Observable.fromPromise(promise); 
    } 
} 

export class IUploadRequest { 
    public file: File; 
    public description: string; 
    public chapterId: number; 
} 

私は

public class FileUploadRequest 
{ 
    public long ContentSize { get; set; } 
    public HttpFile File { get; set; } 
    public string Description { get; set; } 
    public int ChapterId { get; set; } 
} 

とC#のAPIで...にバインドしようとしているモデルは...

var request = this.Bind<FileUploadRequest>(); 

私が間違って何をしているのですか? "file"は常にC#でnullに戻ります。

答えて

0

私はこれをリクエスト自体に入れ、Request.Fileのファイルをつかんで固定しました。

関連する問題