2014-10-17 12 views
8

बनावट अपलोड के लिए निम्न कोड कोणीय 1.2.26 में काम कर रहा था, लेकिन जब मैंने अपना वेब एप्लिकेशन 1.3.0 में अपग्रेड किया तो काम करना बंद कर दिया।'अप्रत्याशित टोकन' 1.3.0

एचटीएमएल कोड

<input file-model="file" name="file" type="file"> 

fileModel निर्देशक

app.directive('fileModel', [ '$parse', function($parse) { 
    return { 
     restrict : 'A', 
     link : function(scope, element, attrs) { 
      var model = $parse(attrs.fileModel); 
      var modelSetter = model.assign; 

      element.bind('change', function() { 
       scope.$apply(function() { 
        modelSetter(scope, element[0].files[0]); 
       }); 
      }); 

      scope.$on("reset", function() { 
       element.val(null); 
      }); 

     } 
    }; 
} ]); 

अपलोड फंक्शन - 1.2.26 के रूप में सामग्री प्रकार से काम नहीं होगा "बहुखण्डीय/फार्म-डेटा" को चुनने में। लेकिन "अपरिभाषित" के साथ सामग्री-प्रकार कोणीय कुछ प्रकार का जादू करेगा जो इसे काम करेगा।

var upload = function(textureUploadUrl) { 
     var formData = new FormData(); 
     formData.append('name', $scope.name); 
     formData.append('file', $scope.file); 

     $http.post(textureUploadUrl, formData, { 
      transformRequest : angular.identity, 
      headers : { 
       'Content-Type' : undefined 
      } 
     }).success(function(uploadedTexture) { 
      console.log(uploadedTexture); 

      // further processing of uploadedTexture 
     }); 
} 

त्रुटि:

SyntaxError: Unexpected token h 
    at Object.parse (native) 
    at fromJson (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:1104:14) 
    at defaultHttpResponseTransform (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8572:18) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8517:12 
    at forEach (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:335:20) 
    at transformData (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:8516:3) 
    at transformResponse (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:9224:23) 
    at processQueue (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:12914:27) 
    at https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:12930:27 
    at Scope.$eval (https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0/angular.js:14123:28) 

किसी को भी पता है कि कैसे नए संस्करण में इस काम के पाने के लिए?

अद्यतन

मैं थोड़ा समस्या को संकुचित होता है। यह 1.3.0-आरसी.5 के साथ काम नहीं करता है, लेकिन पिछले संस्करण (आरसी 4) के साथ यह काम करता है। इसलिए, मैं वर्तमान में यह पता लगाने की कोशिश कर रहा हूं कि कौन से परिवर्तन मेरी समस्या का कारण बनते हैं। यहां changelog है।

उत्तर

14

समस्या सर्वर पक्ष पर मेरे बनावट अपलोड अनुरोध के प्रतिक्रिया शीर्षलेख में थी। अपने आवेदन के निर्माण के लिए मैं वसंत MVC का इस्तेमाल किया और इस तरह एक अनुरोध मानचित्रण था, लेकिन produces विनिर्देश के बिना:

@RequestMapping(value = "/uploadUrl", method = RequestMethod.POST, produces = "text/plain; charset=utf-8") 
@ResponseBody 
public String textureUploadPOST(HttpServletRequest req) { 
    // upload texture and create serveUrl for the texture 
    return serveUrl; 
} 

तो, के रूप में सामग्री प्रकार text/plain निर्दिष्ट किए बिना, वसंत स्वचालित रूप से application/json के रूप में सामग्री प्रकार का उपयोग करता है। और यह angular.js को 1.3.0-rc.5 (change) के बाद JSON.parse का आह्वान करने का कारण बनता है। मेरा बनावट अपलोड उस स्थान पर इंगित करने वाला यूआरएल देता है जहां छवि परोसा जाता है। चूंकि यह एक सादा स्ट्रिंग है, इसके परिणामस्वरूप वर्णित त्रुटि संदेश हुआ है। इसलिए, अपने सर्वर प्रतिक्रियाओं में सही सामग्री-प्रकार निर्दिष्ट करना न भूलें :-)

+0

+1। मैं परिदृश्य रूप से परिदृश्य (फ़ाइल अपलोड यूआरएल लौट रहा था) लेकिन वसंत एमवीसी के बजाय जर्सी के साथ। वही समाधान काम करता है, मैं अपने संसाधन को जर्सी समकक्ष के साथ एनोटेट करता हूं: '@Produces (TEXT_PLAIN) '। आपने मुझे बहुत समय बचाया – gontard

+1

सुनकर खुशी हुई! सबसे पहले मैंने सोचा कि इसे अपलोड के साथ ही करना है, लेकिन यह पता चला कि यह प्रतिक्रिया के साथ एक समस्या थी। – Jonas

+0

ध्यान दें कि समस्या तब प्रकट होती है जब मैं कोणीय 1.2 से 1.3 तक अपग्रेड करता हूं। – gontard

संबंधित मुद्दे