Как загрузить изображение с помощью nativescript-camera и nativescript-background-http в IOS - PullRequest
0 голосов
/ 14 декабря 2018

Я могу загрузить файл на Android в веб-API C #, используя nativescript-camera с nativescript-background-http.

Я устанавливаю параметры следующим образом:

  var params = [{ name: "image", filename: fileUri, mimeType: 'application/octet-stream' }];

...

И отправляю запрос:

let request = {
        url: this.API_URL + "/UploadOctetFile",
        method: "POST",
        headers: {
          "Authorization": accessTokenJson,
          "Content-Type": "application/octet-stream",
          "File-Name": imageName
        },  
        description: "{ 'uploading': " + imageName + " }"
      };

      return this.session.multipartUpload(params, request);

В андроиде файл Uri естьвозвращается довольно простым способом:

takePictrue.then((imageAsset: ImageAsset) => {

Затем imageAsset.android содержит файл uri, необходимый для отправки изображения.Однако для ios imageAsset.ios - это PHAsset.Чтобы получить URI файла, я использую следующий код:

        let manager = PHImageManager.defaultManager()
        let options = new PHImageRequestOptions();
        options.resizeMode = PHImageRequestOptionsResizeMode.Exact;
        options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat;

manager.requestImageForAssetTargetSizeContentModeOptionsResultHandler (imageAsset.ios, {width: 2048, height: 1536}, PHImageContentModeAspectFill, options, function (result, info) {let srcfilePath = info.objectForKey ("PHImageFileURLKey"). toString (); ...});

Выше: srcfilePath (который я передаю как fileUri) - это: file: /// var / mobile/Media/DCIM/101APPLE/IMG_1902.JPG

Тогда имя изображения IMG_1902.JPG

Однако при этом загружается пустой файл.Я предполагаю, что мне нужно изменить fileUri или, возможно, я должен использовать другой метод: requestImageForAssetTargetSizeContentModeOptionsResultHandler.

Я попробовал решение, предложенное здесь , чтобы сделать:

 let fileUri = image.fileUri.replace("file://","");

, и я попытался изменить тип пантомимы "mimeType":"image/jpg".

Любые идеи очень ценятся.

1 Ответ

0 голосов
/ 15 декабря 2018

Сэм, это может помочь.Я сделал следующее, чтобы пользователь iOS выбрал фотографию из своей галереи для последующего использования в приложении (Android прост и понятен, как в вашем случае, но iOS возвращает PHAsset):

import { ImageSource } from "image-source";
import { Image } from "tns-core-modules/ui/image";
import { path, knownFolders } from "tns-core-modules/file-system";

//iOS user picks photo...

const iosImg = new ImageSource();
iosImg.fromAsset(myPHAsset).then(imsr => {
  this.counter += 1; //class property to allow unique filenames
  const folder = knownFolders.documents();
  const path2 = path.join(folder.path, `Image${this.counter}.jpg`);
  const saved = imsr.saveToFile(path2, "jpg");
  const img = new Image();
  img.src = path2;
  this.data.changeImage(img); //Ng service to allow use of image in other components
});

Ссылки: {N} документов

{N} imagepicker # 197

{N} imageUpload code

...