NSURLSessionDataTask Не удалось загрузить аудиофайл на серверIOS

Программируем под IOS
Ответить
Гость
 NSURLSessionDataTask Не удалось загрузить аудиофайл на сервер

Сообщение Гость »


Я знаю, что этот вопрос задавался раньше. Но ни один из ответов мне не помог.

Каковы требования:

в приложении iOS пользователь должен иметь возможность запишите короткий аудиофайл (30 секунд), а затем загрузите его на сервер по https-запросу.

Запись и временное сохранение на телефоне работает очень хорошо.

Но я не смог Не могу заставить работать часть загрузки.

Мой код для загрузки файла на стороне API выглядит следующим образом. Протестировал с помощью Postman, работает очень хорошо. Файл получен и сохранен по назначению.

Код: Выделить всё

[HttpPost]
public async Task UploadFile([FromForm] IFormFile file, [FromForm] string name)
{
try
{
if(webHostEnvironment == null)
{
throw new SqlNullValueException("webHostEnvironment is null");
}

if (webHostEnvironment.ContentRootPath == null)
{
throw new SqlNullValueException("webHostEnvironment.ContentRootPath is null");
}

if(file == null)
{
throw new SqlNullValueException("File is null");
}

String path = Path.Combine(webHostEnvironment.ContentRootPath,  "uploads");
if (file.Length > 0)
{
string filePath = Path.Combine(path, file.FileName);
using (Stream fileStream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
}
return BuildResponse(Ok().StatusCode, name);
}
catch(Exception ex)
{
throw new Exception(ex.Message );
}
}
Вот мой код Objective-C для загрузки файла:

Код: Выделить всё

-(void)uploadFile:(NSData*)fileData{
if(fileData != nil){
NSString *fileName = self.temporaryRecFile.path.lastPathComponent;
NSString *urlString = @"some url";//upload file url

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];
NSString *boundary = @"---------------1234567890";
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[request addValue:contentType forHTTPHeaderField:@"Content-Type"];

NSMutableData *bodyData = [[NSMutableData alloc] init];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@\"\r\n", fileName]] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[NSData dataWithData:fileData]];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[request setHTTPBody:bodyData];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

dispatch_async(dispatch_get_main_queue(), ^{

NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response;
NSInteger responseStatusCode = [httpResponse statusCode];

if(error != nil)
NSLog(@"error uploading file %@", error.localizedDescription);
else{
NSLog(@"response: %lu", responseStatusCode);
NSLog(@"response: %@", data);
NSLog(@"response: %@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
}
});
}];

[dataTask resume];
}
}
Я получаю следующий ответ:

Код: Выделить всё

response: {"code":500,"reason":"File is null"}
Вместо NSURLSessionDataTask я пытался использовать NSURLSessionUploadTask, но безуспешно. Я получил:

Код: Выделить всё

Failed to read the request form. Multipart body length limit 16384 exceeded
Since Postman works very well to upload file using API endpoint. Then the problem must be on the iOS app side.

Any ideas what might be the problem?
Thanks!


Источник: https://stackoverflow.com/questions/781 ... -to-server
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»