ファイルとFormData
をサーバーにアップロードしたいと思います。私はそのようにそれをやったことだし、それが動作します。クライアント側ではサーバー上のディスクにファイルを保存せずにファイルとFormDataを1つの方法でアップロードする方法はありますか?
iは角度2を使用し、ロジックは次のなります
1.Inコンポーネント
onLoadForeignLightCompanies(event: any) {
let fileList: FileList = event.target.files;
if (fileList.length > 0) {
let file: File = fileList[0];
let formData: FormData = new FormData();
formData.append('projectId', this.projectId);
formData.append('file', file);
this.companyService.uploadForeginLightCompany(formData).then(result => {});
this.isLoading = false;
window.location.reload();
}
}
2.Inサービス
サーバー側ではuploadForeginLightCompany(formData: FormData): Promise<any> {
return this.http.post(this.baseUrl + 'foreignLightCompanyImport', formData).toPromise();
}
public byte[] LoadUploadedFile(HttpPostedFile uploadedFile)
{
var buf = new byte[uploadedFile.InputStream.Length];
uploadedFile.InputStream.Read(buf, 0, (int)uploadedFile.InputStream.Length);
return buf;
}
[HttpPost, Route("foreignLightCompanyImport")]
public async void UploadForeignLigtCompanyCompanyFile()
{
string root = HttpContext.Current.Server.MapPath("~/App_Data");
var file = LoadUploadedFile(HttpContext.Current.Request.Files[0]);
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
var projectId = provider.FormData.GetValues("projectId")[0];
((IForeginLightCompanyService) Service).UploadDataFromExcel(file, Convert.ToInt32(projectId));
}
以下の構成がサーバー側で使用されています。 HttpContext.Current.Server.MapPath("~/App_Data");
しかし、この場合、ファイルはディスクに保存されます。私はファイルをディスクに保存せずにアップロードする方法を知っています。しかし、この場合、私は他のパラメータを得ることができません。 projectId
e.t.cのように
ファイルをディスクに保存せずにこれを行う方法はありますか? 私はクライアント側でモデルを使用し、他のパラメータでjsonでバイナリ文字列のようなファイルを送信する必要がありますか? 誰かがこの問題の解決策を知っているのでしょうか、それとも考えがあるのでしょうか?モデルタイプのパラメータを持つように
public class UploadForeignLigtCompanyCompanyFile
{
public string ProjectId { get; set; }
public HttpPostedFileBase Attachment { get; set; }
}
そして、あなたのポストのアクションメソッドを変更:
変更を見てください。私は詳細を追加しました。 – Seva