Hpw, чтобы получить файл из dxFileUploader
Я пытаюсь получить файл из dxFileUploader (DevExpress), но я не могу прочитать этот файл в коде позади. Я вижу только объект My FileUploader:
{
location: "before",
widget: "dxFileUploader",
options: {
multiple: false,
accept: "*",
value: [],
uploadMode: "instantly",
onValueChanged: (e) => {
$.ajax({
url: "api/CoordinateSystems/UploadFile",
type: "POST",
data: e.value,
error(xhr, textStatus, errorThrown) {
DxExtensions.notifyAjaxError(xhr, textStatus, errorThrown);
DxExtensions.error(errorThrown);
},
success(data) {
dataSource.load();
}
});
}
}
Codebehind:
[HttpPost]
[Route("UploadFile")]
public IActionResult UploadFile(dynamic file)
{
List<string> errors = new List<string>(); // added this just to return something
if (file != null)
{
string physicalWebRootPath = System.IO.Path.Combine(Directory.GetCurrentDirectory(), "wwwroot");
// do something
}
return Ok();
}
Как получить файл, который я могу сохранить на сервере и работать с ним?
1 ответ
Это AngularJS, но вы можете использовать его часть
HTML
<div dx-file-uploader="{
buttonText: 'Select file',
labelText: 'Drop file here',
multiple: false,
uploadMode: 'instantly',
bindingOptions: { uploadUrl: 'UploadUrl' ,disabled : 'IsReadOnly'},
showFileList: false,
onUploaded: on_Uploaded,
onInitialized: on_Initialized
}"></div>
UploadUrl
$scope.UploadUrl = CTHelper.ApiUrl() + '/Api/Case/PostFile';
API
[Route("Api/Case/PostFile")]
public async Task<IHttpActionResult> PostFile()
{
if (!Request.Content.IsMimeMultipartContent())
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
try
{
var provider = new MultipartMemoryStreamProvider();
await Request.Content.ReadAsMultipartAsync(provider);
string path = System.Web.HttpContext.Current.Server.MapPath(Api.Helper.Constants.PortalFilesVirtualDir);
foreach (var file in provider.Contents)
{
var filename = file.Headers.ContentDisposition.FileName.Trim('\"');
var buffer = await file.ReadAsByteArrayAsync();
File.WriteAllBytes(string.Format("{0}/{1}", path, filename), buffer);
//Do whatever you want with filename and its binaray data.
}
}
catch (Exception err)
{
HttpResponseMessage message = new HttpResponseMessage(HttpStatusCode.InternalServerError);
message.Content = new StringContent(err.Message);
throw new HttpResponseException(message);
}
return Ok();
}