Comment ajouter la propriété « Autre » à un fichier image sur le serveur?

voix
0

J'utilise noyau asp.net et api web pour le téléchargement des images.

Sur le serveur:

[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)
    {
        //...
    }
}

Le client:

// 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);  
});

Instantané:

1

Ma question: comment ajouter une nouvelle propriété « Autre » pour ICollection<IFormFile> filesdétecter la propriété Alternatequi est envoyé du client (formData)?

Créé 18/10/2016 à 11:21
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
0

Ce n'est pas la réponse à la question , How to add property “Alternate” to an image file on server?mais il semble que la résolution du problème (envoyer le fichier image avec un texte alternatif).

Sur le serveur:

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);
        }

    }
}

Le client:

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));
}

Nous n'arriverions jamais double clé dans le dictionnaire , car Files[i]['name']est toujours primaire et ne peut pas être changé ( le piratage par une personne) si nous avons vérifié les fichiers en double de téléchargement avant.

Ensuite, nous pouvons fusionner le nom du fichier (en files) avec Keydans _altspour obtenir le texte alternatif.

Instantané:

2

MISE À JOUR: Le code dans l'instantané a eu tort.

Créé 18/10/2016 à 12:36
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more