2017-10-17 1 views
0

Nancy의 HttpFile에 typescript의 File을 포함하는 put 요청을 바인딩하려고합니다. 요청은 항상 C#의 HttpFile을 null로 설정합니다. 이것을 할 수있는 방법이 있습니까?HttpFile이 포함 된 Nancy Model에 javascript 형식의 File을 바인딩하는 방법은 무엇입니까?

@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>(); 

내가 바인딩하기 위해 노력하고있어 모델 ...? "파일"은 항상 C#에서 null로 돌아옵니다.

답변

0

그냥 ... 요청 자체에 들어가서 Request.File의 File을 가져 와서이 문제를 해결했습니다.

관련 문제