


Pelaksanaan kerja web muat naik fail dan muat turun kod penerangan terperinci_javascript kemahiran
Artikel ini terutamanya memperkenalkan pengetahuan memuat naik dan memuat turun fail kerja web dari tiga aspek, termasuk tiga aspek berikut:
1. Permintaan Permintaan Pembungkusan
2. Dapatkan kelas parsing untuk muat naik fail
3. Konfigurasi dan penggunaan projek sebenar
Memuat naik dan memuat turun web harus menjadi keperluan yang sangat biasa, sama ada tapak web kecil atau tapak web perdagangan dengan akses serentak yang besar. Sudah tentu, WebWork juga menyediakan pemintas yang sangat mesra untuk melaksanakan muat naik fail, membolehkan kami memberi tumpuan kepada reka bentuk dan pelaksanaan logik perniagaan Apabila melaksanakan muat naik dan muat turun, kami juga memberi perhatian kepada pelaksanaan muat naik dan muat turun rangka kerja.
1. Permintaan Permintaan Pembungkusan
•Setiap kali pelanggan meminta Tindakan, kaedah kelas penghantaran WebWork ServletDispatcher.service() akan dipanggil.
Untuk proses khusus, sila rujuk: Penjelasan terperinci tentang kaedah memanggil Tindakan dalam Kerja Web
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { if (encoding != null) { try { request.setCharacterEncoding(encoding); } catch (Exception localException) { } } if (locale != null) { response.setLocale(locale); } if (this.paramsWorkaroundEnabled) { request.getParameter("foo"); } request = wrapRequest(request); //封装 request请求 serviceAction(request, response, getNameSpace(request), getActionName(request), getRequestMap(request), getParameterMap(request), getSessionMap(request), getApplicationMap()); } catch (IOException e) { String message = "Could not wrap servlet request with MultipartRequestWrapper!"; log.error(message, e); sendError(request, response, 500, new ServletException(message, e)); } }
Mari kita lihat dahulu apa yang dilakukan oleh kaedah wrapRequest:
protected HttpServletRequest wrapRequest(HttpServletRequest request) throws IOException { if ((request instanceof MultiPartRequestWrapper)) { return request; } if (MultiPartRequest.isMultiPart(request)) { request = new MultiPartRequestWrapper(request, getSaveDir(), getMaxSize()); } return request; }
• Pertama, ia menentukan sama ada permintaan masuk telah dirangkumkan oleh MultiPartRequestWrapper Jika ya, ia akan kembali secara langsung.
• Jika tidak, tentukan sama ada ContentType dalam maklumat pengepala permintaan ialah permintaan berbilang jenis parameter (multipart/formdata) Jika ya, bungkus permintaan itu ke dalam jenis MultiPartRequestWrapper sendiri, yang mewarisi HttpServletRequestWrapper.
Kaedah MultiPartRequest.isMultiPart() dilaksanakan seperti berikut:
public static boolean isMultiPart(HttpServletRequest request){ String content_type = request.getHeader("Content-Type"); return content_type != null && content_type.startsWith("multipart/form-data"); }
•Mengkonfigurasi direktori storan sementara fail dan saiz muat naik maksimum dalam webwork.properties sebenarnya mula dimainkan pada masa ini.
•Parameter yang diluluskan semasa mencipta objek MultiPartRequestWrapper diperolehi oleh kaedah getSaveDir() dan getMaxSize().
•Dalam kaedah, atribut webwork.multipart.saveDir dan webwork.multipart.maxSize dalam konfigurasi akan dicari, direktori sementara yang ditentukan oleh atribut dan kandungan maksimum yang dimuat naik akan digunakan direktori persekitaran akan digunakan.
Pelaksanaan khusus adalah seperti berikut:
protected String getSaveDir() { String saveDir = Configuration.getString("webwork.multipart.saveDir").trim(); if (saveDir.equals("")) { File tempdir = (File) getServletConfig().getServletContext().getAttribute("javax.servlet.context.tempdir"); log.info("Unable to find 'webwork.multipart.saveDir' property setting. Defaulting to javax.servlet.context.tempdir"); if (tempdir != null) { saveDir = tempdir.toString(); } } else { File multipartSaveDir = new File(saveDir); if (!multipartSaveDir.exists()) { multipartSaveDir.mkdir(); } } if (log.isDebugEnabled()) { log.debug("saveDir=" + saveDir); } return saveDir; }
2. Dapatkan kelas penghuraian untuk muat naik fail
Mari kita lihat bagaimana pembina MultiPartRequestWrapper membungkus permintaan:
public MultiPartRequestWrapper(HttpServletRequest request, String saveDir, int maxSize) throws IOException { super(request); if ((request instanceof MultiPartRequest)) { this.multi = ((MultiPartRequest) request); } else { String parser = ""; parser = Configuration.getString("webwork.multipart.parser"); if (parser.equals("")) { log.warn("Property webwork.multipart.parser not set. Using com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest"); parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest"; } else if (parser.equals("pell")) { parser = "com.opensymphony.webwork.dispatcher.multipart.PellMultiPartRequest"; } else if (parser.equals("cos")) { parser = "com.opensymphony.webwork.dispatcher.multipart.CosMultiPartRequest"; } else if (parser.equals("jakarta")) { parser = "com.opensymphony.webwork.dispatcher.multipart.JakartaMultiPartRequest"; } try { Class baseClazz = MultiPartRequest.class; Class clazz = Class.forName(parser); if (!baseClazz.isAssignableFrom(clazz)) { addError("Class '" + parser + "' does not extend MultiPartRequest"); return; } Constructor ctor = clazz.getDeclaredConstructor(new Class[] { Class.forName("javax.servlet.http.HttpServletRequest"), String.class, Integer.TYPE }); Object[] parms = { request, saveDir, new Integer(maxSize) }; this.multi = ((MultiPartRequest) ctor.newInstance(parms)); } catch (ClassNotFoundException e) { addError("Class: " + parser + " not found."); } catch (NoSuchMethodException e) { addError("Constructor error for " + parser + ": " + e); } catch (InstantiationException e) { addError("Error instantiating " + parser + ": " + e); } catch (IllegalAccessException e) { addError("Access errror for " + parser + ": " + e); } catch (InvocationTargetException e) { addError(e.getTargetException().toString()); } } }
• Pertama, ia menentukan sama ada permintaan masuk adalah subkelas kelas abstrak MultiPartRequest Jika ya, ia merujuk secara langsung kepada permintaan oleh pembolehubah jenis MultiPartRequestnya sendiri.
• Jika tidak, baca sifat webwork.multipart.parser konfigurasi WebWork, yang menentukan perkara yang Webwork gunakan secara dalaman untuk melaksanakan muat naik fail. Jika tidak dinyatakan, pelaksanaan PellMultiPartRequest digunakan secara lalai.
•Selepas mencari kelas yang dikonfigurasikan, WebWork mencipta contoh kelas itu melalui refleksi Java. Semua kelas yang disokong mewarisi daripada MultiPartRequest Selepas membuat contoh, mereka dihantar ke atas dan diberikan kepada berbilang ahli MultiPartRequestWrapper.
• Muat naik fail WebWork merangkumi beberapa lib FileUpload biasa dan tidak dilaksanakan dengan sendirinya.
•Ia termasuk tiga pelaksanaan: pell, cos, dan apache biasa merangkumi ketiga-tiga pakej ini dan menyediakan antara muka akses biasa MultiPartRequest Pelaksanaan terperinci ialah PellMultiPartRequest, CosMultiPartRequest dan JakartaMultiPartRequest.
• jakarta menyokong berbilang fail menggunakan nama parameter HTTP yang sama. Jika anda menggunakan pemintas FileUpload WebWork secara langsung, adalah disyorkan untuk menggunakan pell, kerana apabila anda memuat naik fail dengan nama fail Cina, hanya pakej pell akan mendapatkan nama fail Cina dengan betul, dan apache common akan menukar nama fail kepada fail seperti nama xxx.tmp, dan cos akan bercelaru, jadi satu-satunya pilihan kami ialah pell.
•Fungsi cos agak berkuasa, tetapi enkapsulasi WebWork menyebabkan ia kehilangan banyak fungsi cos perlu menetapkan pengekodan aksara permintaan. Enkapsulasi WebWork tidak ditetapkan, yang membawa kepada masalah cos yang bercelaru Sudah tentu, jika anda menggunakan cos sahaja, anda akan mengelakkan masalah sedemikian.
3. Konfigurasi dan penggunaan projek sebenar
• Fail konfigurasi
konfigurasi tindakan:
<action name="uploadAttach" class=".....attach.action.uploadAttach" caption="上传附件"> <result name="success" type="dispatcher"> <param name="location">/result.jsp</param> </result> <result name="error" type="dispatcher"> <param name="location">/result.jsp</param> </result> <interceptor-ref name="defaultStack" /> <interceptor-ref name="fileUploadStack" /> //webwok 上传所需要的拦截栈 </action> //拦截栈的定义 <interceptor-stack name="fileUploadStack"> <interceptor-ref name="fileUpload"/> <interceptor-ref name="params"/> </interceptor-stack> //拦截栈对应的拦截器 <interceptor name="fileUpload" class="com.opensymphony.webwork.interceptor.FileUploadInterceptor"/> <interceptor name="params" class="com.opensymphony.xwork.interceptor.ParametersInterceptor"/>
• Bahagian hadapan menggunakan Ajaxupload, yang agak stabil dan berkuasa Saya tidak akan menerangkan butiran di sini. Terdapat tapak web rasmi: jQuery AjaxUpload kod muat naik imej
.•Dengan merangkum permintaan muat naik Webwork dan mendapatkan kelas penghuraian, semua foreplay telah disediakan Pelaksanaan khusus dalam pemintas muat naik adalah seperti berikut:
public String intercept(ActionInvocation invocation) throws Exception {if (!(ServletActionContext.getRequest() instanceof MultiPartRequestWrapper)) { if (log.isDebugEnabled()) { log.debug("bypass " + invocation.getProxy().getNamespace() + "/" + invocation.getProxy().getActionName()); } return invocation.invoke(); } Action action = invocation.getAction(); ValidationAware validation = null; if ((action instanceof ValidationAware)) { validation = (ValidationAware) action; } MultiPartRequestWrapper multiWrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest(); if (multiWrapper.hasErrors()) { Collection errors = multiWrapper.getErrors(); Iterator i = errors.iterator(); while (i.hasNext()) { String error = (String) i.next(); if (validation != null) { validation.addActionError(error); } log.error(error); } } Enumeration e = multiWrapper.getFileParameterNames(); while ((e != null) && (e.hasMoreElements())) { String inputName = (String) e.nextElement(); String[] contentType = multiWrapper.getContentTypes(inputName); String[] fileName = multiWrapper.getFileNames(inputName); File[] file = multiWrapper.getFiles(inputName); if (file != null) { for (int i = 0; i < file.length; i++) { log.info("file " + inputName + " " + contentType[i] + " " + fileName[i] + " " + file[i]); } } if (file == null) { if (validation != null) { validation.addFieldError(inputName, "Could not upload file(s). Perhaps it is too large?"); } log.error("Error uploading: " + fileName); } else { invocation.getInvocationContext().getParameters().put(inputName, file); invocation.getInvocationContext().getParameters().put(inputName + "ContentType", contentType); invocation.getInvocationContext().getParameters().put(inputName + "FileName", fileName); } } String result = invocation.invoke(); for (Enumeration e1 = multiWrapper.getFileParameterNames(); e1 != null && e1.hasMoreElements();) { String inputValue = (String) e1.nextElement(); File file[] = multiWrapper.getFiles(inputValue); for (int i = 0; i < file.length; i++) { File f = file[i]; log.info("removing file " + inputValue + " " + f); if (f != null && f.isFile()) f.delete(); } } return result; }
•Tentukan dahulu sama ada permintaan semasa mengandungi permintaan multimedia, jika ya, rekod log dan laksanakan tindakan.
•Kemudian tentukan sama ada MultiPartRequestWrapper mengandungi ralat semasa proses muat naik fail, kembalikan maklumat ralat kepada klien dan jangan terus memanggil Action.
•Jika tiada syarat penghakiman di atas dipenuhi, mula melintasi parameter fail yang dimuat naik dalam MultiPartRequestWrapper, dan letakkan nama fail dan jenis kandungan fail ke dalam peta parameter Tindakan untuk kelas perniagaan seterusnya beroperasi.
•Dalam fungsi pemintas muat naik fail WebWork, Fail yang disediakannya hanyalah fail sementara, yang akan dipadamkan secara automatik selepas Tindakan dilaksanakan Anda mesti mengendalikan sendiri storan fail itu dalam Tindakan, atau menulisnya ke direktori pelayan, atau Simpan ke pangkalan data. Jika anda bercadang untuk menulis ke direktori pada pelayan, anda mesti menghadapi masalah menangani sendiri nama fail yang sama, tetapi sebenarnya pakej cos sudah menyediakan peraturan penamaan semula automatik untuk nama semula fail.
Kod di atas memperkenalkan anda kepada pengetahuan berkaitan Webwork untuk muat naik dan muat turun fail. Saya harap ia akan membantu anda.

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Python menyediakan pilihan berikut untuk membuka fail yang dimuat turun: open() function: buka fail menggunakan laluan dan mod yang ditentukan (seperti 'r', 'w', 'a'). Pustaka permintaan: Gunakan kaedah muat turun() untuk memberikan nama secara automatik dan membuka fail secara terus. Pustaka Pathlib: Gunakan kaedah write_bytes() dan read_text() untuk menulis dan membaca kandungan fail.

Cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail Laravel ialah rangka kerja Web PHP popular yang menyediakan pelbagai fungsi dan alatan untuk menjadikan pembangunan aplikasi Web lebih mudah dan cekap. Salah satu fungsi yang biasa digunakan ialah muat naik dan muat turun fail. Artikel ini akan memperkenalkan cara menggunakan Laravel untuk melaksanakan fungsi muat naik dan muat turun fail, serta menyediakan contoh kod khusus. Muat naik fail Muat naik fail merujuk kepada memuat naik fail tempatan ke pelayan untuk penyimpanan. Dalam Laravel kita boleh menggunakan muat naik fail

Bagaimana untuk menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel? Dengan perkembangan pesat teknologi komunikasi moden, e-mel telah menjadi cara penting untuk orang ramai berkomunikasi dan menghantar maklumat dalam kehidupan seharian. Dalam pembangunan web, kami sering menghadapi keperluan untuk menghantar dan menerima e-mel dengan lampiran. Sebagai bahasa skrip sebelah pelayan yang berkuasa, PHP menyediakan pelbagai fungsi dan perpustakaan kelas yang boleh memudahkan proses pemprosesan e-mel. Artikel ini akan memperkenalkan cara menggunakan fungsi PHP untuk memuat naik dan memuat turun lampiran untuk menghantar dan menerima e-mel. Emel dihantar dahulu, kami

Untuk melaksanakan muat naik dan muat turun fail dalam dokumen Workerman, contoh kod khusus diperlukan. Pengenalan: Workerman ialah rangka kerja komunikasi rangkaian tak segerak PHP berprestasi tinggi yang ringkas, cekap dan mudah digunakan. Dalam pembangunan sebenar, muat naik dan muat turun fail adalah keperluan fungsi biasa Artikel ini akan memperkenalkan cara menggunakan rangka kerja Workerman untuk melaksanakan muat naik dan muat turun fail, dan memberikan contoh kod khusus. 1. Muat naik fail: Muat naik fail merujuk kepada operasi memindahkan fail pada komputer tempatan ke pelayan. Yang berikut digunakan

Bagaimana untuk melaksanakan muat naik fail menggunakan gRPC? Buat definisi perkhidmatan sokongan, termasuk permintaan dan mesej respons. Pada klien, fail yang hendak dimuat naik dibuka dan dibahagikan kepada beberapa bahagian, kemudian distrim ke pelayan melalui aliran gRPC. Di bahagian pelayan, ketulan fail diterima dan disimpan ke dalam fail. Pelayan menghantar respons selepas muat naik fail selesai untuk menunjukkan sama ada muat naik berjaya.

Cara menggunakan rangka kerja Hyperf untuk memuat turun fail Pengenalan: Muat turun fail adalah keperluan biasa apabila membangunkan aplikasi web menggunakan rangka kerja Hyperf. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk memuat turun fail, termasuk contoh kod khusus. 1. Persediaan Sebelum memulakan, pastikan anda telah memasang rangka kerja Hyperf dan berjaya mencipta aplikasi Hyperf. 2. Buat pengawal muat turun fail Mula-mula, kita perlu mencipta pengawal untuk mengendalikan permintaan muat turun fail. Buka terminal dan masuk

Cara menyelesaikan pengecualian muat naik fail Java (FileUploadException Satu masalah yang sering dihadapi dalam pembangunan web ialah FileUploadException (pengecualian muat naik fail). Ia mungkin berlaku disebabkan oleh pelbagai sebab seperti saiz fail melebihi had, format fail tidak sepadan atau konfigurasi pelayan yang salah. Artikel ini menerangkan beberapa cara untuk menyelesaikan masalah ini dan menyediakan contoh kod yang sepadan. Hadkan saiz fail yang dimuat naik Dalam kebanyakan senario, hadkan saiz fail

Memuat Naik dan Memproses Fail dalam Laravel: Mengurus Fail Yang Dimuat Naik Pengguna Pengenalan: Muat naik fail ialah keperluan fungsi yang sangat biasa dalam aplikasi web moden. Dalam rangka kerja Laravel, muat naik dan pemprosesan fail menjadi sangat mudah dan cekap. Artikel ini akan memperkenalkan cara mengurus fail yang dimuat naik pengguna dalam Laravel, termasuk pengesahan, penyimpanan, pemprosesan dan paparan muat naik fail. 1. Muat naik fail Muat naik fail merujuk kepada memuat naik fail daripada klien ke pelayan. Dalam Laravel, muat naik fail sangat mudah dikendalikan. pertama,
