Как загрузить файл mvc6?

80
12

Я хочу реализовать api, который загружает zip файлы.

Моя функция работает с текстовыми файлами, но не для zip файла. Zip файл сохраняется, но не может быть открыт. Знаете ли вы, что это хорошо для этого?

На клиенте я вызываю api в следующем действии:

 [HttpPost]
public async Task<IActionResult> Upload(ICollection<IFormFile> files)
{
using (var client = new HttpClient())
{
foreach (var file in files)
{
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
var fileContent = new StreamContent(file.OpenReadStream());
fileContent.Headers.Add("X-FileName", fileName);
fileContent.Headers.Add("X-ContentType", file.ContentType);

var response = await client.PostAsync(url2, fileContent);
}
}
}
return View(nameof(this.Index));

}

Это мой апи:

 [HttpPost]
public async Task<IActionResult> Post()
{

var input = new StreamReader(Request.Body).ReadToEnd();
var fileName = Request.Headers["X-FileName"];
var fileType = Request.Headers["X-ContentType"];

using (var sw = new StreamWriter(@"C:\" + fileName))
{
sw.Write(input);
}

await Task.FromResult(0);
return new ObjectResult(true);
}

спросил(а) 2021-01-19T15:21:18+03:00 9 месяцев назад
1
Решение
121

Это мой solutin:

В клиентском API

        [HttpPost("{lastModified}")]
public async Task<string> Upload(long lastModified)
{
using (var client = new HttpClient())
{

foreach (var file in Request.Form.Files)
{
if (file.Length > 0)
{
var fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.Trim('"');
var fileContent = new StreamContent(file.OpenReadStream());
var archiveUrl = "path to api with 2 parameters {fileName}/{lastModified}";
var datasetResponse = await client.PostAsync(archiveUrl, fileContent);
var dataset = await datasetResponse.Content.ReadAsStringAsync();
return dataset;
}
}

throw new ApplicationException("Cannot updated dataset to archive");
}
}

В API сервера

        [HttpPost("{fileName}/{lastModified}")]
public async Task<IActionResult> Post(string fileName, long lastModified)
{
var dataSet = getDataSet();

return new ObjectResult(dataSet);
}

ответил(а) 2021-01-19T15:21:18+03:00 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема