2017-02-01 15 views
1

アンドロイド携帯電話の写真ライブラリから画像を晴れたWebサービスに送信しようとしています。ファイル共有。 デバイス上でコードを実行すると、エラーは常にコード1 FILE_NOT_FOUND_ERRで呼び出されます。画像Uriは、HTMLの画像タグに表示されるので正しいと思われます。ファイル転送プラグインfor Cordovaがエラーコード1 FILE_NOT_FOUND_ERRと内部サーバエラー5002を返します

私のHTMLは、私が到達しようとしています。この

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width"> 
    <title></title> 

    <link href="lib/ionic/css/ionic.css" rel="stylesheet"> 
    <link href="css/style.css" rel="stylesheet"> 
    <script src="js/platformOverrides.js"></script> 
    <script src="cordova.js"></script> 
    <script src="lib/ionic/js/ionic.bundle.js"></script> 
    <script src="js/ng-cordova.min.js"></script> 
    <script src="js/app.js"></script> 
    <link rel="stylesheet" href="css/jquery.mobile-1.4.5.min.css" /> 
</head> 

<body ng-app="app"> 
    <script src="scripts/jquery-3.1.1.min.js"></script> 
    <script src="scripts/jquery.mobile-1.4.5.min.js"></script> 
    <script src="https://zumo.blob.core.windows.net/sdk/azure-mobile-apps-client.min.js"></script> 
    <script src="bower_components/angular-base64/angular-base64.js"></script> 

    <ion-pane> 
     <ion-header-bar class="bar bar-dark"> 
      <h1 class="title">Welcome to the ABC News App</h1> 
     </ion-header-bar> 

     <ion-content class="bar has-header" id="content"> 
      <img id="lastPhoto" src=""/> 
     </ion-content> 

     <div class="bar bar-footer"> 
      <div class="button-bar" id="uploadBar"> 
       <a class="button button-royal" id="btnSelectPhoto">Select Media</a> 
       <a class="button button-calm" id="btnTakePhoto">Take Photo or Video</a> 
      </div> 

      <div class="button-bar" style="display:none" id="selectBar"> 
       <a class="button button-balanced" id="btnSendMedia">Send Media</a> 
       <a class="button button-assertive" id="btnCancel">Cancel</a> 
      </div>    
     </div> 
    </ion-pane> 
</body> 
</html> 

C#紺碧ウェブAPIコードのように見える

document.getElementById("btnSelectPhoto").onclick = function() { 

      navigator.camera.getPicture(onSuccess, null, { quality: 50, correctOrientation: true, destinationType: Camera.DestinationType.FILE_URI, encodingType: navigator.camera.EncodingType.JPEG, sourceType: navigator.camera.PictureSourceType.SAVEDPHOTOALBUM }); 

      function onSuccess(imageUrl) { 
       var lastPhotoContainer = document.getElementById("lastPhoto"); 
       filename = (imageUrl.split('/').pop().split('#')[0].split('?')[0]); 

       lastPhotoContainer.src = imageUrl; 

       document.getElementById("btnSendMedia").onclick = function() {; 
        var sourceURL = document.getElementById("lastPhoto").getAttribute("src"); 
        var uri = "http://xxx/api/xx/xx"; 
        var win = function (r) { 
         alert('upload complete'); 
        } 
        var fail = function (error) { 
         alert('error'); 
         alert(error.code + " !!!! " + error.target + " !!!! " + error.source); 
         alert(error.http_status + " !!!! " + error.body + " !!!! " + error.exception) 
        } 
        var options = new FileUploadOptions(); 
        options.chunkedMode = false; 
        options.filekey = "photoPath"; 
        options.filename = filename; 
        options.mimetype = "image/jpeg"; 
        options.httpMethod = "POST"; 
        options.headers = { Connection: "close", Accept: 'application/json' }; 
        var ft = new FileTransfer(); 
        ft.upload(sourceURL, encodeURI(uri), win, fail, options, true); 
       }; 
      } 
     }; 

は次のとおりです:

[EnableCors(origins: "*", headers: "*", methods: "*")] 
    [WebMethod] 
    [System.Web.Http.AcceptVerbs("GET", "POST")] 
      public void PostMedia() 
      { 
       HttpPostedFile f = HttpContext.Current.Request.Files["photoPath"]; 
       //Logic that will be implemented when file received 
      } 

これが私の現在のjavascriptのコードです

私のアンドロイドデバイスでコードを実行すると、sourceUrlはfile:/// storage/emulated/0/A ndroid/data/io.cordova.myapp5705a5/cache/images.jpeg?1485926439023これは正しいパスのようです(私もアンドロイドエミュレータのパスをハードコードしようとしましたが動作しませんでした)。エラーコード1は、ファイルが見つからないことを意味し、500の内部サーバーエラーを意味します。 APIまたはjavascriptコードに問題はありますか?

答えて

0

Javascriptコードに大文字の問題があります。 Cordova's documentationあたり、

オプション:オプションのパラメータ(オブジェクト)。有効なキー:

  • fileKey:フォーム要素の名前。デフォルトはfileです。 (DOMString)
  • fileName:サーバーにファイルを保存するときに使用するファイル名。デフォルトはimage.jpgです。 (DOMString)
  • httpMethod:使用するHTTPメソッド(PUTまたはPOST)。デフォルトはPOSTです。 (DOMString)
  • mimeType:アップロードするデータのMIMEタイプ。デフォルトはimage/jpegです。 (DOMString)
  • params:HTTP要求で渡すオプションのキーと値のペアのセット。 (Object、key/value - DOMString)
  • chunkedMode:チャンクストリーミングモードでデータをアップロードするかどうか。デフォルトはtrueです。 (ブール値)
  • ヘッダー:ヘッダー名/ヘッダー値のマップ。配列を使用して、複数の値を指定します。 iOS、FireOS、Androidの場合、Content-Typeという名前の ヘッダーが存在する場合、マルチパートフォームデータは使用されません。 (Object)を

ですから、交換する必要があるだろう:

options.filekey = "photoPath"; 
options.filename = filename; 
options.mimetype = "image/jpeg"; 

と:あなたの応答のための

options.fileKey = "photoPath"; 
options.fileName = filename; 
options.mimeType = "image/jpeg"; 
+0

ありがとう!私はコードのその部分を変更しましたが、私はまだ同じエラーコード1 File Not Foundを取得しているようです。このエラーが発生する理由が他にありますか? – Tess

+0

このエラーはどこで発生しましたか(**失敗**機能?) –

+0

私は実際に問題を理解しました。私は自分のウェブの設定でを追加しました。私のエラーの詳細な説明は私のウェブAPIにありました。 – Tess

関連する問題