Tôi đang làm theo ví dụ được cung cấp trong trang tải lên tệp commons về API truyền trực tuyến. Tôi đang cố gắng tìm ra cách để có được phần mở rộng tập tin của tập tin được tải lên, làm thế nào để ghi tập tin vào một thư mục và phần tồi tệ nhất là nơi người viết các chú thích ví dụ // Process the input stream...
Nó khiến tôi băn khoăn Tôi là người duy nhất không biết làm thế nào.cách tải lên tệp bằng cách sử dụng tải lên tệp commons trực tuyến api
Trả lời
Sử dụng này trong tập tin HTML của bạn:
<form action="UploadController" enctype="multipart/form-data" method="post">
<input type="file">
</form>
và trong UploadController
servlet, bên trong doPost
phương pháp:
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
try {
List items = upload.parseRequest(request);
Iterator iterator = items.iterator();
while (iterator.hasNext()) {
FileItem item = (FileItem) iterator.next();
if (!item.isFormField()) {
String fileName = item.getName();
String root = getServletContext().getRealPath("/");
File path = new File(root + "/uploads");
if (!path.exists()) {
boolean status = path.mkdirs();
}
File uploadedFile = new File(path + "/" + fileName);
System.out.println(uploadedFile.getAbsolutePath());
item.write(uploadedFile);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
'boolean isMultipart = ServletFileUpload.isMultipartContent (yêu cầu); ServletFileUpload upload = ServletFileUpload mới(); FileItemIterator iter = upload.getItemIterator (yêu cầu); while (iter.hasNext()) { FileItemStream item = iter.next(); Tên chuỗi = item.getFieldName(); InputStream stream = item.openStream(); if (item.isFormField()) {} else { // Xử lý các input stream ... }} ' – qualebs
rất xin lỗi vì sự định dạng mã nghèo. Tôi đang sử dụng thiết bị di động. bây giờ bạn xử lý luồng từ đoạn mã trên như thế nào? – qualebs
Bạn có chắc chắn rằng bạn đang sử dụng API trực tuyến 'FileItem item = (FileItem) iterator.next();'? Tôi nghĩ rằng nó nên là 'FileItemStream item = iterator.next();' để bạn có thể sử dụng streaming. – Don
Đây là một Servlet mà những gì bạn muốn nó làm.
package rick;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.util.*;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import javax.servlet.annotation.WebServlet;
@WebServlet("/upload4")
public class UploadServlet4 extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.print("Request content length is " + request.getContentLength() + "<br/>");
out.print("Request content type is " + request.getHeader("Content-Type") + "<br/>");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if(isMultipart){
ServletFileUpload upload = new ServletFileUpload();
try{
FileItemIterator iter = upload.getItemIterator(request);
FileItemStream item = null;
String name = "";
InputStream stream = null;
while (iter.hasNext()){
item = iter.next();
name = item.getFieldName();
stream = item.openStream();
if(item.isFormField()){out.write("Form field " + name + ": "
+ Streams.asString(stream) + "<br/>");}
else {
name = item.getName();
System.out.println("name==" + name);
if(name != null && !"".equals(name)){
String fileName = new File(item.getName()).getName();
out.write("Client file: " + item.getName() + " <br/>with file name "
+ fileName + " was uploaded.<br/>");
File file = new File(getServletContext().getRealPath("/" + fileName));
FileOutputStream fos = new FileOutputStream(file);
long fileSize = Streams.copy(stream, fos, true);
out.write("Size was " + fileSize + " bytes <br/>");
out.write("File Path is " + file.getPath() + "<br/>");
}
}
}
} catch(FileUploadException fue) {out.write("fue!!!!!!!!!");}
}
}
}
Có một 'thư viện' tuyệt vời để làm điều này cho bạn. Nó thực sự chỉ là một mẫu mã của một bộ lọc sẽ ngăn chặn bất kỳ bài viết hình thức của loại multipart và cung cấp cho bạn truy cập vào tập tin, tên tập tin vv ... mà bạn có thể xử lý trong phương pháp bài servlet bình thường của bạn.
Vấn đề với tất cả các câu trả lời là nó không trả lời câu hỏi ban đầu !!
Khi thông báo "xử lý luồng đầu vào", nó thực sự làm bạn khó hiểu phải làm gì tiếp theo. Tôi đã nhìn vào câu hỏi này suốt đêm qua cố gắng tìm một gợi ý từ một trong những câu trả lời, nhưng không có gì. Tôi đã đi và thử các trang web khác, và không có gì.
Vấn đề là, những gì chúng tôi đang làm nằm ngoài phạm vi của Tệp tải lên và đó là vấn đề.
Chúng tôi hiện đang làm việc với Java.IO InputStream
InputStream stream = item.openStream();
bây giờ chúng tôi làm việc với điều đó "suối."
Ở đây bạn có thể tìm thấy tất cả các loại câu trả lời cho những gì bạn cần. Nó khá ngớ ngẩn đến nỗi nó mơ hồ, và làm cho nó có vẻ như bạn phải làm một cái gì đó thêm với Commons, nhưng trong thực tế nó không phải commons InputStream đó là Java.io's!
Trong trường hợp của chúng tôi, chúng tôi mất con suối chúng ta đưa ra và tải lên một tập tin mới bằng cách đọc dữ liệu byte
Trang web này cũng có một loạt các tùy chọn mà có thể có ích http://www.jedi.be/blog/2009/04/10/java-servlets-and-large-large-file-uploads-enter-apache-fileupload/
Tôi hy vọng điều này sẽ giúp người khác những người đang nhầm lẫn và mới với FileUploading, bởi vì tôi chỉ tìm ra điều này trong vài phút trước khi viết câu trả lời này.
Đây là mã của tôi để lưu tệp vào ổ đĩa gốc.
try {
System.out.println("sdfk");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext())
{
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
System.out.println("File field " + name + " with file name "
+ item.getName() + " detected.");
// Process the input stream
File f = new File("/"+item.getName());
System.out.println(f.getAbsolutePath());
FileOutputStream fout= new FileOutputStream(f);
BufferedOutputStream bout= new BufferedOutputStream (fout);
BufferedInputStream bin= new BufferedInputStream(stream);
int byte_;
while ((byte_=bin.read()) != -1)
{
bout.write(byte_);
}
bout.close();
bin.close();
}
}
catch (FileUploadException ex)
{
Logger.getLogger(UploadServlet.class.getName()).log(Level.SEVERE, null, ex);
}
response.sendRedirect("/plans.jsp");
Chúc may mắn!
Tôi đã đưa ra ở đây http://www.javamonamour.org/2015/10/web-application-for-file-upload-with.html một ví dụ làm việc hoàn chỉnh (một dự án Eclipse cho WebLogic, nhưng bạn có thể dễ dàng điều chỉnh nó cho Tomcat).
Nếu không, chỉ cần git clone https://github.com/vernetto/WebFileUploaderStreaming. Một ví dụ làm việc hoàn chỉnh tốt hơn một nghìn đoạn mã.
- 1. JSP - Tải lên tệp bằng Apache Commons
- 2. Tải lên lại bằng API tải lên tệp HTML5 -
- 3. Tải lên tệp trực tuyến bằng cách sử dụng chai (hoặc bình hoặc tương tự)
- 4. các tệp nginx tải lên trực tuyến bằng proxy_pass
- 5. Sử dụng API Dropbox để tải tệp lên bằng Android
- 6. Cách tải tệp lên Soundcloud bằng Python?
- 7. Tải lên khác biệt/tải lên gia tăng bằng cách sử dụng REST API
- 8. Nhận tiến trình tải lên trong khi tải tệp lên bằng cách sử dụng Webclient.Uploadfile
- 9. tải lên tệp bằng FTP bằng nant
- 10. Tải lên tệp bằng cách sử dụng file_get_contents
- 11. Cách tải lên tệp bằng Mojolicious?
- 12. Tải lên tệp .zip lên FTP và giải nén tệp bằng cách sử dụng PHP
- 13. Cách: Tải tệp lên bằng ember.js
- 14. Cách xem tệp sau khi tải tệp lên App_Data/Tải lên trong MVC 3 bằng Razor?
- 15. Tải lên tệp bằng Tornado
- 16. Làm cách nào để kích hoạt tệp tải lên bằng Trình tải tệp lên Valums Ajax?
- 17. Tải lên tệp bằng RichFaces
- 18. Tải lên tệp bằng boto
- 19. Cách tải tệp lên GitHub
- 20. Tải xuống tệp bằng cách sử dụng commons java apache?
- 21. Tải tệp lên thư mục cụ thể bằng cách sử dụng api google drive bằng PHP
- 22. Tải lên tệp bằng Backbone
- 23. Tải tệp trực tiếp lên S3 bằng thanh tiến trình
- 24. Tải lên tệp không đồng bộ (tải lên tệp AJAX) bằng cách sử dụng jsp và javascript
- 25. Tải tệp lên bằng extjs4
- 26. Tải lên tệp Blueimp: một tệp tải lên
- 27. Tải lên tệp bằng Sinatra
- 28. Tệp WebClient.UploadFile tải lên tệp tải lên dưới dạng dòng
- 29. tải lên tệp wcf
- 30. Tải tệp lên Skydrive
Có một lượng thông tin khổng lồ về cách thực hiện việc này tại đây: [link] (http://commons.apache.org/proper/commons-fileupload/using.html). – Sticks