Need help - js/file api - full path

poruka: 11
|
čitano: 1.949
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
17 godina
neaktivan
offline
Need help - js/file api - full path

Dakle ovako, želio bih napraviti drag and drop sistem uploadanja fajlova na svojoj stranici koristeći html5 i js - vrlo slično izgleda kao ovo na bol forumu za dodavanje slika. Uspio sam srediti dropanje fajlova i njihovo listanje. Problem je u tome da ne mogu dobiti full path dropanih fajlova (samo filename) koji bi kasnije mogao koristiti za spremanje na server (taj path bi stavio u neki element na stranicu i kasnie pobrao u aspx.cs u fileupload kontrolu), a neznam kako drugačije spremiti. U mozillinoj dokumentaciji ima mogućnost dobivanja full patha koristeći mozFullPath, ali mislim da to samo u firefoxu radi (ako radi). Naravno da mogu uploadanje rješiti na puno jednostavnije načine iz samog .neta, ali želim srediti ovo dropanje više fajlova odjednom kako spada. Također znam da postoje jQuery, Ajax i druge alternative, ali ovo mi se nekako čini najzgodnijim jer je sve nativno i radi svugdje gdje ima html5, bez ikakvih dodanih library-a.

 

Inače koristim aspx c# u izradi stranice, koji je prilično ograničen što se file uploada tiče (ako ne želim koristiti neke custom kontrole za to ili si dati truda pa napraviti vlastitu).

 

Eto, pomoć bi bila poželjna. Ima li tko ideju kako dobiti path svake slike u ovoj for petlji ili možda zna neki bolji način drag and dropanja?

 

Idealno bi bilo kada bi mogao dobiti ovo što se koristi tu na forumu. Naravno, ako to nije problem.

 

U attachmentu je slika kako to moje izgleda za sada, nakon što se par fajlova dropa (i slika se prikaže kao thumbnail)

 

 

<div id="drop_zonei" class="drop_zone">Drop files here</div>

<div class="list"><output id="listi">Selected files: none</output></div>

 

<script type="text/javascript">

 

                                   function handleFileSelect(evt)

                                   {

                                     evt.stopPropagation();

                                     evt.preventDefault();

                                     var files = evt.dataTransfer.files; // FileList object.

                                     // files is a FileList of File objects. List some properties.

                                     var output = [];

                                     for (var i = 0, f; f = files[i]; i++) {

                                       output.push('<li><strong>', f.name, '</strong> (', f.type || 'n/a', ') - ', f.size / 1024, ' KB</li>');

                                     }

                                     document.getElementById('listi').innerHTML = 'Selected files:<ul>' + output.join('') + '</ul>';

 

 

                                     // Loop through the FileList and render image files as thumbnails.

                                     for (var i = 0, f; f = files[i]; i++)

                                     {

                                       // Only process image files.

                                       if (f.type.match('image.*')) {

                                         var reader = new FileReader();

 

                                         // Closure to capture the file information.

                                         reader.onload = (function (theFile) {

                                           return function (e) {

                                             // Render thumbnail.

                                             var span = document.createElement('span');

                                             span.innerHTML = ['<img class="thumb" width="128px" height="128px" src="', e.target.result, '" title="', theFile.name, '"/>'].join('');

                                             document.getElementById('listi').insertBefore(span, null);

                                           };

                                         })(f);

 

                                         // Read in the image file as a data URL.

                                         reader.readAsDataURL(f);

                                       }

                                     }

                                   }

 

                                   function handleDragOver(evt)

                                   {

                                     evt.stopPropagation();

                                     evt.preventDefault();

                                   }

 

                                   // Setup the dnd listeners.

                                   var dropZone = document.getElementById('drop_zonei');

                                   dropZone.addEventListener('dragover', handleDragOver, false);

                                   dropZone.addEventListener('drop', handleFileSelect, false);

                                   dropZone.addEventListener('change', handleFileSelect, false);

</script>

 

 

 

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Poruka je uređivana zadnji put sri 14.9.2011 4:29 (FioPro).
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

Bump?

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Moj PC  
0 0 hvala 0
16 godina
offline
Need help - js/file api - full path

Ovisi kolike fajlove želiš. Ne znam ali da li je najbolja praksa ali u .net-u kod višestrukog file uploada za svaki file otvoriš novi thread ali i dalje ne možeš velike fajlove uploadati. Inače to možeš izvesti s fleshom ili silverlightom, a pošto si .net preporučujem silverlight. 

 
0 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

Da i ja sam mislio da bi mogao Silverlight upogoniti, al problem s tim (kao i sa flashom) mi je da nije nativno podržan sa svih strana

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Moj PC  
0 0 hvala 0
16 godina
offline
Need help - js/file api - full path

 

<html>

<head id="Head1" runat="server">

   <title></title>

   <link href="/Style.css" rel="Stylesheet" />

  <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.6.1.min.js"></script>

   <script>

     var dropZone;

     $(document).ready(function () {

       dropZone = $('#dropZone');

       dropZone.removeClass('error');

 

       if (typeof(window.FileReader) == 'undefined') {

         dropZone.text('Browser Not Supported!');

         dropZone.addClass('error');

         return;

       }

       dropZone[0].ondragover = function () {

         dropZone.addClass('hover');

         return false;

       };

       dropZone[0].ondragend = function () {

         dropZone.removeClass('hover');

         return false;

       };

       dropZone[0].ondrop = function(event) {

         event.preventDefault();

         dropZone.removeClass('hover');

         var file = event.dataTransfer.files[0];

         if(file.size > <%=maxRequestLength%>) {

           dropZone.text('File Too Large!');

           dropZone.addClass('error');

           return false;

         }

         var xhr = new XMLHttpRequest();

         xhr.upload.addEventListener('progress', uploadProgress, false);

         xhr.onreadystatechange = stateChange;

         xhr.open('POST', '/dragAndDrop.aspx', true);

         xhr.setRequestHeader('X-FILE-NAME', file.name);

         xhr.send(file);

       };

     });

     function uploadProgress(event) {

       var percent = parseInt(event.loaded / event.total * 100);

       $('#dropZone').text('Uploading: ' + percent + '%');

     }

     function stateChange(event) {

       if (event.target.readyState == 4) {

         if (event.target.status == 200 || event.target.status == 304) {

           $('#dropZone').text('Upload Complete!');

         }

         else {

           dropZone.text('Upload Failed!');

           dropZone.addClass('error');

         }

       }

     }

   </script>

</head>

<body>

   <form id="form1" runat="server">

   <div id="dropZone">

     Drop File Here to Upload.

   </div>

   </form>

</body>

</html>

 

     protected int maxRequestLength

     {

       get

       {

         HttpRuntimeSection section = ConfigurationManager.GetSection("system.web/httpRuntime") as HttpRuntimeSection;

 

         if (section != null)

           return section.MaxRequestLength * 1024; 

         else

           return 4096 * 1024; 

       }

     }

     protected void Page_Load(object sender, EventArgs e)

     {

       handleFileUpload();

     }

     private void handleFileUpload()

     {

       if (!string.IsNullOrEmpty(Request.Headers["X-File-Name"]))

       {

         string path = Server.MapPath(string.Format("~/Uploads/{0}", Request.Headers["X-File-Name"]));

         Stream inputStream = Request.InputStream;

 

         FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate);

 

         inputStream.CopyTo(fileStream);

         fileStream.Close();

       }

     }

 

 

 

Poruka je uređivana zadnji put uto 20.9.2011 12:04 (Gajotres).
 
1 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

E puno hvala, isprobat ću ovo čim nađem vremena.

 

Zanima me, od kud ti to, jesi sam napisao ili našo snippete na netu?

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Moj PC  
0 0 hvala 0
16 godina
offline
Need help - js/file api - full path

Client side sam našao na netu, a server side imam par verzija. Ta više fajlova recimo napraviš nešto u ovome stilu. Sry zbog naziva gledam u projek i pretpostavljam da sam imao dobar razlog

 

 

HttpFileCollection hfc = Request.Files;

for (int i = 0; i < hfc.Count; i++)

{

 HttpPostedFile hpf = hfc[i];

 

 if (hpf.ContentLength > 0)

     {

 hpf.SaveAs(Server.MapPath("~/upload/") + "ovo je ime slike znaći tu ide recimo 1.jpg to sam odrediš, recimo datum + random broj");

 }

 

}

 

 

 

edit: ne mogu nikako editirati da bude pravilo formatiran code u editoru

Poruka je uređivana zadnji put uto 20.9.2011 14:45 (Gajotres).
 
1 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

Eto stvarno puno hvala (tek sam početnik sa js), čitajući kod čini mi se da će raditi ko švicarski sat, pogotovo sa ovim 2. postom. Probam danas navečer kad se vratim doma.

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Poruka je uređivana zadnji put uto 20.9.2011 14:56 (FioPro).
Moj PC  
0 0 hvala 0
16 godina
offline
Need help - js/file api - full path

Ovo prvo radi 100% ako hočeš zipam project samo s tim pa ti dam link

 
0 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

Evo isprobao sam sada sa više fajlova od jednom. Ide sve iz prvog posta. ovo sa httpfilecollectionom nisam isprobavao.

 

Da bi radilo sa više fajlova od jednom, potrebno je malo modificirati ondrop event u ovom js da bude ovako:

doda se for koji lista kroz tih više fajlova i za svaki zove handleFileUpload() iz admin.aspx(.cs) koji se odvrti prilikom pageloada (ista stranica na kojoj se nalazi ovaj kod)

 

 

     dropZone[0].ondrop = function(event) {

     event.preventDefault();

     dropZone.removeClass('hover');

     for (var i=0; i<event.dataTransfer.files.length; i++)

     {

     var file = event.dataTransfer.files[i];

     if(file.size > <%=maxRequestLength%>)

     {

      dropZone.text('File Too Large!');

      dropZone.addClass('error');

      //return false;

     }

     else

     {

       var xhr = new XMLHttpRequest();

       xhr.upload.addEventListener('progress', uploadProgress, false);

       xhr.onreadystatechange = stateChange;

       xhr.open('POST', 'admin.aspx', true);

       xhr.setRequestHeader('X-FILE-NAME', file.name);

       xhr.send(file);

     }

     }

 

također sam malo modificirao i taj handleFileUpload() da bi se nosio sa slučajevima da fajlovi istog imena već postoje pa da ih ne overwritea:

 

 

 void handleFileUpload()

   {

     if (!string.IsNullOrEmpty(Request.Headers["X-File-Name"]))

     {

       string path = Server.MapPath("../NBlogAtt/" + Request.Headers["X-File-Name"]);

       if (File.Exists(path))

       {

         path = Server.MapPath("../NBlogAtt/" + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString() + Request.Headers["X-File-Name"]);

       }

       Stream inputStream = Request.InputStream;

 

       FileStream fileStream = new FileStream(path, FileMode.OpenOrCreate);

 

       inputStream.CopyTo(fileStream);

       fileStream.Close();

     }

   }

 

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Poruka je uređivana zadnji put uto 20.9.2011 23:22 (FioPro).
Moj PC  
0 0 hvala 0
17 godina
neaktivan
offline
Need help - js/file api - full path

Evo kako to sada izgleda skombinirano sve skupa:

 

http://dl.dropbox.com/u/19166690/dndupload2.avi

 

hvala na pomoći!

UT3, Lily Allen, Franz Ferdinand, R.E.M., nVidia, Intel :: FANBOY :: BEWARE!
Moj PC  
0 0 hvala 0
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice