[英]In GWT, is Multipart form-data guaranteed to be sent in the order it is on the form?
使用 FileItemIterator 時,您可以檢查表單上的每個項目。 據我所知,它們確實是按順序出現在 HTML 中的。
迭代器會告訴您它是表單字段還是上傳文件,如我編寫的舊函數中所示。
在處理文件上傳時,使用 getFieldName() 來標識表單字段並使用 getName() 來處理來自客戶端的文件名。
難點在於在 web.xml 文件的參數中分配 servlet。
希望下面的代碼能幫助你弄清楚。
public class FileUploadServlet extends HttpServlet {
private static final long serialVersionUID = -6988332690679764038L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException {
String path = "/home/tomcat/engage/media/";
String user = "";
if (ServletFileUpload.isMultipartContent(request)) {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
boolean gotPath = false;
String message = "";
String media_category = "";
StringBuilder sb = new StringBuilder();
sb.append(Shared.getTimeStamp() + ": Uploading med files to category - ");
try {
FileItemIterator it = upload.getItemIterator(request);
while (it.hasNext()) {
FileItemStream item = it.next();
//message += item.getFieldName() + ": ";
if (item.isFormField()) {
if (item.getFieldName().equals("MediaCategory")) {
media_category = Streams.asString(item.openStream());
path += media_category;
gotPath = true;
message += path + System.lineSeparator();
} else if (item.getFieldName().equals("UserName")) {
user += Streams.asString(item.openStream());
}
} else {
if (gotPath) {
String fileout = path + "/" + item.getName();
message += fileout + System.lineSeparator();
InputStream input = null;
OutputStream output = null;
try {
output = new FileOutputStream(new File(fileout));
input = item.openStream();
byte[] buffer = new byte[256];
int count;
while ((count = input.read(buffer)) > 0) {
output.write(buffer, 0, count);
}
} finally {
input.close();
output.close();
}
}
}
}
} catch (Exception e) {
response.sendRedirect("Error on item: " + e.getLocalizedMessage());
}
response.setStatus(HttpServletResponse.SC_CREATED);
//response.getWriter().print(message);
sb.append(message + System.lineSeparator());
Shared.writeUserLog(user, sb.toString());
} else {
response.sendError(HttpServletResponse.SC_UNSUPPORTED_MEDIA_TYPE,
"Unsupported media type...");
}
}
}
網頁.xml
<context-param>
<!-- max size of the upload request -->
<param-name>maxSize</param-name>
<param-value>3145728</param-value>
</context-param>
<context-param>
<!-- max size of any uploaded file -->
<param-name>maxFileSize</param-name>
<param-value>1024000</param-value>
</context-param>
<context-param>
<!-- Useful in development mode to slow down the uploads in fast networks.
Put the number of milliseconds to sleep in each block received in the server.
false or 0, means don't use slow uploads -->
<param-name>slowUploads</param-name>
<param-value>200</param-value>
</context-param>
<servlet>
<servlet-name>fileUpload</servlet-name>
<servlet-class>com.parity.mediamanager.server.FileUploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>fileUpload</servlet-name>
<url-pattern>/fileupload</url-pattern>
</servlet-mapping>
我知道 servlet 設置有效,但我仍然不確定上下文參數以及它們是否真的有所作為。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.