#asp.net #asp.net-web-api #upload #asp.net-core
#asp.net #asp.net-web-api #загрузка #asp.net-core
Вопрос:
Я использую asp.net ядро и веб-api для загрузки изображений.
На сервере:
[Produces("application/json")]
[Route("api/Upload")]
public class UploadApiController : Controller
{
private readonly IHostingEnvironment _environment;
public UploadApiController(IHostingEnvironment environment)
{
_environment = environment;
}
[HttpPost]
public async Task Post(ICollection<IFormFile> files)
{
//...
}
}
На клиенте:
// Files is an array that contains all temporary images for uploading.
let Files = [];
let image_preview = function (file) {
file['Alternate'] = 'alternate_text';
Files.push(file);
// other implements...
};
$('button#upload').click(function () {
let formData = new FormData();
for (let i = 0; i < Files.length; i ) {
formData.append('files', Files[i])
}
let xhr = new XMLHttpRequest();
xhr.open('POST', '/api/upload', true);
xhr.onload = function () {
console.log('uploading...')
};
xhr.send(formData);
});
Снимок:
Мой вопрос: как добавить новое свойство «Alternate» ICollection<IFormFile> files
для определения свойства Alternate
, отправляемого с клиента (FormData)?
Ответ №1:
Это не ответ на вопрос How to add property “Alternate” to an image file on server?
, но похоже на решение проблемы (отправка файла изображения с альтернативным текстом).
На сервере:
using Newtonsoft.Json;
[HttpPost]
public async Task Post(ICollection<IFormFile> files, IList<string> alts)
{
IDictionary<string, string> _alts = new Dictionary<string, string>();
foreach (var alt in alts)
{
IDictionary<string, string> temp = JsonConvert.DeserializeObject<Dictionary<string, string>>(alt);
foreach (var item in temp)
{
_alts.Add(item.Key, item.Value);
}
}
}
На клиенте:
for (let i = 0; i < Files.length; i ) {
formData.append('files', Files[i]);
let name = Files[i]['name'],
alt = {};
alt[name] = 'alt_text';
formData.append('alts', JSON.stringify(alt));
}
Мы никогда не получим дубликат ключа в словаре, потому Files[i]['name']
что он всегда первичен и не может быть изменен (взломан кем-то), если мы проверили дубликат загружаемого файла раньше.
Затем мы можем объединить имя файла (in files
) с Key
in _alts
, чтобы получить альтернативный текст.
Снимок:
ОБНОВЛЕНИЕ: код в моментальном снимке был неправильным.