2009-05-29 17 views
7

त्वरित संस्करण:मैं फ्लैश से ASP.NET तक एक छवि कैसे पास करूं?

मैं उपयोगकर्ता ब्राउज़र पर सर्वर पर जेनरेट की गई एक छवि कैसे प्राप्त करूं?

मौजूदा योजना यह है:

  1. फ्लैश डेवलपर जेपीईजी
  2. को बिटमैप में परिवर्तित कर देंगे इसके बाद वे साइट पर एक पृष्ठ के लिए जेपीईजी पोस्ट करेंगे।
  3. मुझे लगता है कि मैं WebService बना सकता हूं जो पोस्ट पढ़ने और इसे फ़ाइल के रूप में सहेजने के लिए StreamReader का उपयोग करेगा।

क्या यह काम करेगा? ऐसा करने के लिए कोई मौजूदा कोड/नमूने?

मुझे लगता है कि हम ASP.NET पर कोई फ़ाइल अपलोड करने के लिए कोड देखने में सक्षम होना चाहिए।

+0

क्या यह एएस 2 या एएस 3 है? –

+0

यह एएस 3 होगा। – EfficionDave

उत्तर

13

इस उदाहरण में, मैंने मंच पर एक बटन के साथ एक फ्लैश फ़ाइल बनाई है। जब आप उस बटन पर क्लिक करते हैं, तो फ्लैश बटन की छवि को एएसपीएक्स फ़ाइल में भेजता है जो इसे जेपीईजी के रूप में सहेजता है। जैसा कि आप देखेंगे कि यह DisplayObject को BitmapData ऑब्जेक्ट में खींचकर किया जाता है और इस तरह, आप DisplayObject से प्राप्त किसी भी चीज़ के साथ बटन को आसानी से प्रतिस्थापित कर सकते हैं (जिसमें एक मूवी क्लिप भी शामिल है जिसमें एक पेंट एप्लिकेशन आदि के लिए कैनवास शामिल है) ।

मैं आपको फ्लैश तत्व के माध्यम से पहले और फिर .NET बैकएंड के माध्यम से चलाऊंगा।

फ्लैश

ASP.NET (या किसी अन्य बैकएंड) आप 3 पार्टी पुस्तकालयों की एक जोड़ी की जरूरत करने जा रहे हैं करने के लिए फ्लैश से इस तरह की एक जनित छवि भेजने के लिए। हमें एक जेपीईजी एनकोडर की आवश्यकता होगी (जिसमें फ्लैश नहीं है, लेकिन फ्लेक्स डू के हाल के संस्करण) जिन्हें हम एएस 3 कोर लिब http://code.google.com/p/as3corelib/ से प्राप्त कर सकते हैं। तार पर डेटा भेजने के लिए हमें बेस 64 एन्कोडर की भी आवश्यकता होगी। मैं डायनामिक फ्लैश से एक का उपयोग करूंगा, http://dynamicflash.com/goodies/base64/ पर उपलब्ध होगा।

इन्हें डाउनलोड करें और उन्हें अपनी हार्ड डिस्क (जैसे सी: \ lib फ़ोल्डर) पर कहीं समझदार निकालें।

मैंने एक नई AS3 फ़्लैश फ़ाइल बनाई और इसे अपलोडर.फला के रूप में सहेजा। मैंने मंच पर एक बटन घटक जोड़ा और इसे btnUpload नाम दिया। इसके बाद मैंने एक्शनस्क्रिप्ट सेटिंग्स संपादित की और क्लासपाथ में अपना सी: \ lib फ़ोल्डर जोड़ा। तब मैंने दस्तावेज़ को अपलोडर का वर्ग नाम दिया और फ़ाइल को सहेजा।

इसके बाद, मैं एक ActionScript फ़ाइल बनाया है और उसमें निम्नलिखित कोड कहा:

package 
{ 
    import flash.display.BitmapData; 
    import flash.display.MovieClip; 
    import flash.events.MouseEvent; 
    import flash.net.URLLoader; 
    import flash.net.URLRequest; 
    import flash.net.URLRequestMethod; 
    import flash.net.URLVariables; 
    import flash.utils.ByteArray; 
    import fl.controls.Button; 
    import com.adobe.images.JPGEncoder; 
    import com.dynamicflash.util.Base64; 


    public class Uploader extends MovieClip 
    { 
     // Reference to the button on the stage 
     public var btnUpload:Button; 

     // Encoder quality 
     private var _jpegQuality:int = 100; 

     // Path to the upload script 
     private var _uploadPath:String = "/upload.aspx"; 

     public function Uploader() 
     { 
      btnUpload.addEventListener(MouseEvent.CLICK, buttonClick); 
     } 

     private function buttonClick(e:MouseEvent):void 
     { 
      // Create a new BitmapData object the size of the upload button. 
      // We're going to send the image of the button to the server. 
      var image:BitmapData = new BitmapData(btnUpload.width, btnUpload.height); 

      // Draw the button into the BitmapData 
      image.draw(btnUpload); 

      // Encode the BitmapData into a ByteArray 
      var enc:JPGEncoder = new JPGEncoder(_jpegQuality); 
      var bytes:ByteArray = enc.encode(image); 

      // and convert the ByteArray to a Base64 encoded string 
      var base64Bytes:String = Base64.encodeByteArray(bytes); 

      // Add the string to a URLVariables object 
      var vars:URLVariables = new URLVariables(); 
      vars.imageData = base64Bytes; 

      // and send it over the wire via HTTP POST 
      var url:URLRequest = new URLRequest(_uploadPath); 
      url.data = vars; 
      url.method = URLRequestMethod.POST; 

      var loader:URLLoader = new URLLoader(); 
      loader.load(url); 
     } 
    } 
} 

मैं नाम Uploader.as के साथ इस फ़ाइल FLA के बगल में बचा लिया।

मैंने एसडब्ल्यूएफ को अपनी Asp.NET वेबसाइट की जड़ में प्रकाशित किया। यह कोड मानता है कि आप जेपीईजी को 100% की गुणवत्ता के साथ अपलोड करना चाहते हैं और वह डेटा जो डेटा प्राप्त करेगी उसे upload.aspx कहा जाता है और साइट की जड़ में स्थित है।

ASP.NET

मेरी वेबसाइट की जड़ में मैं upload.aspx नाम के एक वेबफ़ॉर्म बनाया। .aspx फ़ाइल में, मैंने पृष्ठ निर्देश के अलावा सभी सामग्री को हटा दिया।

using System; 
using System.IO; 

public partial class upload : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // Get the data from the POST array 
     string data = Request.Form["imageData"]; 

     // Decode the bytes from the Base64 string 
     byte[] bytes = Convert.FromBase64String(data); 

     // Write the jpeg to disk 
     string path = Server.MapPath("~/save.jpg"); 
     File.WriteAllBytes(path, bytes); 

     // Clear the response and send a Flash variable back to the URL Loader 
     Response.Clear(); 
     Response.ContentType = "text/plain"; 
     Response.Write("ok=ok"); 
    } 
} 

वहाँ स्पष्ट रूप से इस तरह के पथ को बचाने लेकिन इस से आप में सक्षम होना चाहिए के रूप में हार्ड-कोडेड मान हैं:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="upload.aspx.cs" Inherits="upload" %> 
फिर codebehind में

, मैं निम्नलिखित कहा: यह इस तरह की सामग्री वर्णन दिया गया है जो भी सिस्टम आपको चाहिए उसे बनाएं।

+0

, डायनामिकफ्लैश डॉट कॉम से बेस 64 एन्कोडर डाउनलोड करने के लिए आपके द्वारा प्रदान किया गया लिंक मुझे लगता है कि आप कुछ वैकल्पिक विकल्प सुझा सकते हैं। धन्यवाद – freebird

+0

@ फ्रीबर्ड क्या आपने "एक्शनस्क्रिप्ट बेस 64 एन्कोडर" के लिए Google किया था? ऐसा लगता है कि इन दिनों एएस 3 में बनाया गया है ... –

+0

, मैंने इसे www.sociodox.com से डाउनलोड किया, इससे मदद मिली .. धन्यवाद। – freebird

0

क्या उसे मानक HTML फॉर्म जैसी फ़ाइलें पोस्ट करें। आप नीचे दिए गए संग्रह का उपयोग करके

Request.Files

यह सिर्फ क्या एक FileUpload नियंत्रण करता है HttpPostedFiles का संग्रह वापस आ जाएगी द्वारा करने के लिए पेज वह पोस्ट कर रहा है की Page_Load घटना में उन फ़ाइलों को एक्सेस कर सकते हैं।

1

यदि आपको छवि को हेरफेर करने की आवश्यकता है, तब तक जब तक आप बाइट [] या पोस्ट की गई फ़ाइल का स्ट्रीम प्राप्त कर सकें, तो आप इसकी एक छवि बना सकते हैं, उदा।

MemoryStream mstr = new MemoryStream(myByteArray); 
Image myImage = Image.FromStream(mstr); 
+0

एक बार जब मैं छवि को अपने इमेज में संग्रहीत करता हूं, तो क्या मैं इसे एसक्यूएल में संग्रहीत कर सकता हूं या इसे छवि नियंत्रण में उपयोगकर्ता को दिखा सकता हूं, क्या यह संभव है। – freebird

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