如何将 属性 "Alternate" 添加到服务器上的图像文件?
How to add property "Alternate" to an image file on server?
我正在使用 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);
});
快照:
我的问题:如何向 ICollection<IFormFile> files
添加新的 属性“备用”以检测从客户端 (formData) 发送的 属性 Alternate
?
这不是问题 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']
始终是主要的,如果我们之前检查过重复的上传文件,则无法更改(被某人黑客攻击)。
然后,我们可以将 files
中的文件名与 _alts
中的 Key
合并以获得替代文本。
快照:
更新:快照中的代码错误。
我正在使用 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);
});
快照:
我的问题:如何向 ICollection<IFormFile> files
添加新的 属性“备用”以检测从客户端 (formData) 发送的 属性 Alternate
?
这不是问题 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']
始终是主要的,如果我们之前检查过重复的上传文件,则无法更改(被某人黑客攻击)。
然后,我们可以将 files
中的文件名与 _alts
中的 Key
合并以获得替代文本。
快照:
更新:快照中的代码错误。