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 :)
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.
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źć.
@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;
}
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.
Na razie mam cały czas służby i nawet nie mam czasu sprawdzić. Znajdę chwilę i się odezwę :)