NetCore API - jaki jest najlepszy sposób na przesłanie zdjęcia z kamery telefonu poprzez API i zapisanie go?

0

Witam serdecznie. Zastanawiam się nad możliwymi rozwiązaniami dot. tematu. Problemem jest to, że zdjęcia z różnych telefonów mogą mieć różne rozszerzenia. Są jakieś sprawdzone sposoby? Nie chcę odwalić maniany. Pozdrawiam :)

2

Ale jakie znaczenie ma rozszerzenie? Wysyłasz ciąg bitów do API i robisz z tym co ci się podoba. Możesz wysłać dwa parametry jak bity ze zdjęciem i nazwę pliku jak potrzebujesz.

0

Czy może mi ktoś jeszcze potwierdzić to rozwiązanie? Na niektórych stronach widzę rozwiązanie z multipartformdata, w innych przesyłanie tablicy bitów. I najgorsze jest to, że jak zapiszę plik na serwerze będę się do niego odnosić po adresie url. Musze więc jakoś wykryć jakie rozszerzenie ma plik. Nie wiem jak to ugryźć.

1

@gswidwa1: ja u siebie zdjęcia obsługuję tak (zawsze może przyjść tylko jedno zdjęcie, stąd FirstOrDefault):
backend:

[HttpPut]
[DisableRequestSizeLimit]
[Route("visit/{visitId}/report/photo/add")]
public async Task<ActionResult<AddPhotoResponse>> AddPhoto(int visitId)
{
    try
    {
        if (visitId == 0)
            return StatusCode(400);

        var formCollection = await Request.ReadFormAsync();

        if (formCollection.Files.Count == 0)
            return StatusCode(400);

        var file = formCollection.Files.FirstOrDefault();

        if (file == null || file.Length == 0)
            return StatusCode(400);

        return await routeService
            .AddPhoto(file, HttpContext.Request.Headers[HeaderNames.Authorization].ToString(), visitId);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex);
        return  StatusCode(500, ex.ToString());
    }
}

apka mobilna:

private async Task<AddPhotoResponse> AddPhoto(string uri, string path)
{
    var request = new RestRequest(Path.Combine(API_URL, uri), Method.PUT);
    request.AddHeader("authorization", "Bearer " + userIdentity.Token);

    request.AddHeader("Content-Type", "multipart/form-data");
    request.AddFile("content", path);

    var response = await CallToApiWithLogCommunication<AddPhotoResponse>(request, Path.Combine(API_URL, uri));

    return response;
}
0

Możesz przez multipart/formdata, możesz przez Base64.
Możesz też wysłać plik gdzieś na serwer, a do API dać tylko ścieżkę, gdzie ten plik się znajduje.

0

Na razie mam cały czas służby i nawet nie mam czasu sprawdzić. Znajdę chwilę i się odezwę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1