Apa adalah cara terbaik untuk meng-upload file melalui HTTP POST dengan web form?



Pada dasarnya, sesuatu yang lebih baik dari ini:



Pertama-tama, `browse` tombol terlihat berbeda pada setiap browser. Tidak seperti tombol `kirim` pada formulir, anda harus datang dengan beberapa [hack-y](http://www.quirksmode.org/dom/inputfile.html) cara untuk gaya itu.


Kedua, ada's tidak ada kemajuan indikator yang menunjukkan anda berapa banyak file yang telah di-upload. Biasanya anda harus menerapkan beberapa jenis klien-sisi cara untuk menonaktifkan beberapa mengajukan (misalnya mengubah tombol submit ke tombol dinonaktifkan menunjukkan "Bentuk mengirimkan... mohon menunggu.") atau flash raksasa peringatan.


Apakah ada solusi yang baik untuk ini bahwa don't menggunakan Flash atau Java?


[Yaakov](https://stackoverflow.com/questions/11974/what-is-the-best-way-to-upload-a-file-via-an-http-post-with-a-web-form#12005): produk ini bagus untuk menjadi persis apa yang saya'm mencari, tetapi biaya $1000 dan khusus untuk `ASP.NET.` Apakah ada proyek open source yang menutupi sama atau fungsi yang sama?
Upload File kotak adalah di mana kita're saat ini jika anda don't ingin melibatkan teknologi lainnya seperti Flash, Java atau ActiveX.


Dengan HTML anda cukup banyak terbatas pada pengalaman anda've dijelaskan (tidak ada progress bar, double menyampaikan, dll). Jika anda bersedia untuk menggunakan beberapa javascript, anda dapat memecahkan beberapa masalah dengan memberikan umpan balik yang upload sedang berlangsung dan bahkan [menunjukkan kemajuan upload](http://www.raditha.com/php/progress.php) (ini adalah hack karena anda tidak't harus melakukan full round-trip ke server dan kembali, tapi setidaknya ia bekerja).


Jika anda bersedia untuk menggunakan Flash (yang tersedia cukup banyak di mana saja dan pada banyak platform), anda dapat mengatasi hampir semua masalah ini. Cepat googling muncul [dua](http://www.downloadsquad.com/2006/11/16/swfupload-open-source-flash-multi-file-upload/) [seperti](http://www.codeproject.com/KB/aspnet/FlashUpload.aspx) komponen, keduanya gratis *dan* open source. Saya tidak pernah menggunakan salah satu dari mereka, tapi mereka terlihat baik. BTW, Flash isn't tanpa masalah yang baik, misalnya ketika menggunakan multi-file uploader untuk slide share, browser yang terus-menerus menerjang pada saya :-(


Mungkin solusi terbaik saat ini adalah untuk mendeteksi secara dinamis jika pengguna memiliki Flash, dan jika itu's kasus, memberikan versi flash uploader, sementara masih membuat itu mungkin untuk memilih HTML dasar satu.


HTH
halo boleh tetap dilanjutkan di website ini yaa, karena memang saya harus menjawabnya di website ini.
untuk [gambar](/agnosia) boleh dikirim dengan cara menekan tombol "lampirkan gambar" untuk melanjutkan pada pertanyaan yang sama,
ataupun dengan tombol "Lampirkan file (foto atau video)" pada pertanyaan yang baru.
jangan cantumkan nama atau identitas anda yaa, agar sifatnya tetap rahasia.
atau boleh upload di web lain yang dapat diakses dengan link ya.
saya tunggu balasannya :) <p>saya pikir taruhan terbaik anda <strong>jangka panjang</strong> adalah untuk sepenuhnya membangun kembali/membuat ulang antarmuka. saya menduga bahwa setiap alat otomatis atau bahkan semi-otomatis untuk mengubah elemen flash menjadi sesuatu yang lebih dapat diakses akan membuat anda mengalami banyak kesalahan, dan membuat pemeliharaan di masa depan lebih sulit dan memakan waktu.</p><p>saran saya adalah untuk membangun kembali, dan mungkin menggunakan beberapa elemen flash yang ada untuk bagian paling kompleks dari situs, sambil menempatkan semacam fungsi mundur ke tempat untuk browser mobile yang tidak mendukung flash.</p> <ol> <li> <p>tonton video di <strong>halamannya sendiri</strong> (harus menyertakan <code>youtube.com/watch</code> mis. <code>http://www.youtube.com/watch?v=iwinbn0dhug</code> dalam url). jika anda menontonnya di saluran, klik "lihat komentar, video terkait, dan lainnya" di bawah video.</p> </li> <li> <p>klik di dalam kotak teks komentar langsung di bawah tombol jempol ke atas/bawah. (mengatakan "tanggapi video ini." di dalamnya ketika anda pertama kali mengunjungi.</p> </li> <li> <p>klik tautan "lampirkan video" di sebelah kanan kotak komentar. url halaman harus menyertakan <code>youtube.com/video\_response\_upload</code> misalnya. <code>http://www.youtube.com/video\_response\_upload?v=rehwckye3iq</code></p> </li> <li> <p>pilih dari "rekam video", "pilih video", dan "unggah video" di bilah abu-abu dan ikuti instruksi pada kotak di bawah ini. saat diposting, respons video anda akan muncul di bagian "tanggapan video" di bawah video.</p> </li> </ol> <p>anda perlu menentukan jenis dokumen dalam panggilan url dengan <code>format=raw</code>. joomla kemudian akan secara otomatis memuat <code>view.raw.php</code> file. anda bahkan tidak memerlukan pengontrol khusus untuk itu.</p><p>untuk membuat tombol bilah alat, anda dapat menggunakan ini:</p><pre><code> $bar = jtoolbar::getinstance('toolbar'); $bar-&gt;appendbutton('custom', '&lt;button onclick="window.location.href = \'http://www.google.com\';"&gt;export&lt;/button&gt;', 'export'); </code></pre> <p>aku akan menusuk pertanyaanmu kemarin, tapi kupikir aku harus memikirkannya terlebih dahulu.</p><p>saya benar-benar tidak bisa memberi tahu anda apa "fungsi lain" yang harus anda berikan untuk pengguna anda. saya tidak terpisah dari tim anda. sepertinya anda memaku sebagian besar dari mereka, tetapi pada akhirnya saya tidak dapat membuat keputusan atau memberikan saran ketika kami benar-benar tidak memiliki perincian lengkap tentang apa yang dilakukan aplikasi anda di luar yang memungkinkan mereka membuat formulir.</p><p>namun, saya dapat mengarahkan anda ke beberapa aplikasi lain di luar sana yang dapat memberi anda beberapa gagasan tentang fungsi apa yang dapat anda tambahkan.</p><ul> <li> <a href="http://pencil.evolus.vn/en-us/home.aspx">pensil</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li> <a href="http://iplotz.com/">iplotz</a> - perangkat lunak wireframing/prototyping, periksa fungsionalitasnya</li> <li>google - <a href="http://googlesystem.blogspot.com/2007/02/learning-googles-keyboard-shortcuts.html">ikhtisar pintasan</a> </li> <li>gmail - <a href="http://mail.google.com/support/bin/answer.py?hl=en&amp;answer=6594">daftar pintasan</a> </li> <li>google documents - <a href="http://docs.google.com/support/bin/answer.py?hl=en&amp;answer=66280">daftar pintasan</a> </li> <li> <a href="http://wufoo.com/">wufoo</a> - pembuat formulir online populer, lihat apa yang mereka lakukan</li> </ul><p>anda bisa membuat semua jenis pintasan keyboard gila untuk aplikasi anda. namun, anda mungkin ingin tetap menggunakan yang paling umum digunakan, yang sepertinya sudah anda daftarkan. jika anda akan membuat pintasan baru, pastikan pintasannya intuitif bagi pengguna.</p><p>saya harap tautan itu terbukti spark beberapa ide untuk anda dan tim anda, dan maaf saya tidak bisa memberikan contoh yang tepat.</p> <p>karena http tidak memiliki kewarganegaraan, satu-satunya cara untuk melacak apakah pengguna telah mengirimkan formulir pertama setelah browser ditutup adalah dengan menggunakan mekanisme kegigihan (mis., basis data) seperti yang telah anda lakukan.</p><p>namun, anda mungkin mengalami masalah jika pengguna mengirimkan formulir pertama dan pekerjaan cron berjalan sebelum mereka memiliki kesempatan untuk mengirimkan formulir kedua. anda mungkin ingin juga memeriksa bahwa sejumlah waktu juga telah berlalu.</p><p>secara teoritis anda juga bisa mencoba mendeteksi ketika browser ditutup dan menggunakan acara itu untuk memicu tindakan, tapi saya menyarankan <em>sangat</em> menentangnya.</p> <p>memperbarui modul biasanya dua langkah:</p><ol> <li>ganti file dengan versi baru yang anda unduh, misalnya melalui ftp.</li> <li>jalankan update.php (tidak selalu diperlukan, tetapi jalankan untuk memeriksa apakah pembaruan diperlukan).</li> </ol><p>saat memperbarui, bisa jadi ide yang bagus untuk mencoba pembaruan pada lingkungan pengembangan lokal untuk memeriksa tidak ada yang rusak, dan lakukan pencadangan sebelum pembaruan langsung. beberapa pembaruan kecil dan tidak memerlukan ini.</p><p>tampilan, yang menyimpan banyak konfigurasi dalam database dan baru-baru ini mengalami perubahan besar, adalah salah satu modul di mana anda biasanya ingin mengujinya sebelum memutakhirkan.</p> <p><strong>codebehind</strong>: perlu dikompilasi (model asp.net 1.1). biner yang dikompilasi ditempatkan di folder bin dari situs web. anda perlu melakukan kompilasi di visual studio sebelum anda menyebarkan. ini adalah model yang baik ketika anda tidak ingin kode sumber dapat dilihat sebagai teks biasa. misalnya saat mengirim ke pelanggan yang tidak memiliki kewajiban untuk memberikan kode.</p><p><strong>codefile</strong>: anda memberikan solusi untuk penyebaran file sumber. asp.net 2.0 runtime mengkompilasi kode ketika dibutuhkan. file yang dikompilasi berada di microsoft.net [.net version]\temporary asp.net files.</p> <p>anda selalu bisa memfilter daftar media menggunakan filter <code>pre\_get\_posts</code> yang pertama kali menentukan halaman, dan kemampuan pengguna, dan menetapkan parameter penulis ketika kondisi tertentu terpenuhi ..</p><h1>contoh</h1><pre><code>add\_action('pre\_get\_posts','users\_own\_attachments'); function users\_own\_attachments( $wp\_query\_obj ) { global $current\_user, $pagenow; $is\_attachment\_request = ($wp\_query\_obj-&gt;get('post\_type')=='attachment'); if( !$is\_attachment\_request ) return; if( !is\_a( $current\_user, 'wp\_user') ) return; if( !in\_array( $pagenow, array( 'upload.php', 'admin-ajax.php' ) ) ) return; if( !current\_user\_can('delete\_pages') ) $wp\_query\_obj-&gt;set('author', $current\_user-&gt;id ); return; } </code></pre><p>saya menggunakan topi hapus halaman sebagai syarat sehingga admin dan editor masih melihat daftar media lengkap.</p><p>ada satu efek samping kecil, yang saya tidak dapat melihat kaitannya, dan itu dengan jumlah lampiran yang ditunjukkan di atas daftar media (yang masih akan menunjukkan jumlah total item media, bukan jumlah pengguna yang diberikan - saya akan anggap ini masalah kecil).</p><p>kupikir aku akan memposting semuanya, mungkin berguna ..;)</p> <p> <a href="http://www.w3schools.com/browsers/browsers\_display.asp">w3schools</a> (misalnya) memiliki beberapa statistik pada tampilan browser. per januari 2010:</p><pre><code>higher 1024x768 800x600 640x480 unknown 76% 20% 1% 0% 3% </code></pre><p>link angka tinggi ke <a href="http://www.w3schools.com/browsers/browsers\_resolution\_higher.asp">tabel bar</a> . dari angka yang terlihat seperti 1024x768 adalah resolusi layar minimum yang efektif. namun, anda harus ingat bahwa tidak semua orang menjalankan browser mereka dalam mode layar penuh.</p><p>ada juga halaman <a href="http://www.w3schools.com/browsers/browsers\_stats.asp">statistik browser</a> . peramban dipecah menurut versi (mis. <a href="http://www.w3schools.com/browsers/browsers\_firefox.asp">firefox</a> ). dengan peramban seperti firefox dan chrome tampaknya mayoritas menggunakan versi terbaru (bukan beta). saya menduga ini karena mereka memperbarui secara otomatis.</p><p>lain, lebih umum, situs statistik tersedia dan anda mungkin harus berkonsultasi kisaran untuk mendapatkan gambaran yang lebih baik dari penggunaan browser dan resolusi layar di internet secara keseluruhan.</p>