Ich bin auf eine Situation gestoßen, in der ich die FileUpload-Verarbeitung über JavaScript in Nanika implementieren wollte, die mit Apache Wicket erstellt wurde.
Rest in Wicket ist wicketstuff-restannotations. Es gibt einen Vorgänger, der auch einen Artikel über Qiita veröffentlicht hat, und wenn Sie sich das verknüpfte Dokument ansehen, können Sie ungefähr verstehen, wie es verwendet wird, aber ein Beispiel von FileUpload Wurde nicht gefunden.
Deshalb habe ich beschlossen, eine Notiz zu hinterlassen, dass es vorerst eine Krafttechnik zu sein scheint, aber es hat damit funktioniert.
Anrufer. Komm schon. Ich glaube nicht mehr, dass es JQuery ist, aber es ist Wicket.
test.html
<!DOCTYPE html>
<html>
<body>
<input type="file" id="file-select" style="display:none">
<button id="file-button">Dateiauswahl</button>
<script>
$('#file-button').click(function(e) {
$("#file-select").click();
});
$("#file-select").change(function(e) {
var file = e.target.files;
if(file.length > 0) {
var form = new FormData();
form.append('image', file[0]);
var settings = {
"async": false,
"crossDomain": false,
"url": "fileUpload",
"method": "POST",
"dataType": "text",
"processData": false,
"contentType": false,
"data": form
}
$.ajax(settings).done(function (response) {
if(result.success) {
alert(response);
}
});
}
});
</script>
</body>
</html>
RestResource。 Ist es das unmittelbare Ziel, das FileItem von FileUpload hier abzurufen? Ich denke, dass die Antwort in JSON normal ist, aber ich lasse diesen Teil weg. Es spielt keine Rolle, aber ich bin mir nicht sicher, warum Abstract Rest Resource ein generischer Typ ist.
FileUploadResource.java
package yamane.rest;
import org.apache.commons.fileupload.FileItem;
import org.wicketstuff.rest.annotations.MethodMapping;
import org.wicketstuff.rest.annotations.parameters.RequestBody;
import org.wicketstuff.rest.contenthandling.mimetypes.RestMimeTypes;
import org.wicketstuff.rest.resource.AbstractRestResource;
import org.wicketstuff.rest.utils.http.HttpMethod;
public class FileUploadResource extends AbstractRestResource<FileUploadSerialDeserial> {
public FileUploadResource() {
super(new FileUploadSerialDeserial());
}
@MethodMapping(
value = "/fileUpload",
httpMethod = HttpMethod.POST,
produces = RestMimeTypes.TEXT_PLAIN
)
public String saveImage(@RequestBody FileItem item) {
//Wenn Sie FileItem erhalten können, gewinnen Sie!
return item.getFieldName();
}
}
Der Teil der Leber, IWebSerialDeserial. Nun, ich hole einfach HttpServletRequest und analysiere es mit FileUpload. Es ist bis auf die entsprechende Verarbeitung durchaus angebracht. Eine entsprechende Verarbeitung ist ebenfalls angemessen. Es spielt keine Rolle, aber was ist mit dem Namen SerialDeserial?
FileUploadSerialDeserial.java
package yamane.rest;
import java.io.File;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.wicket.WicketRuntimeException;
import org.apache.wicket.protocol.http.WebApplication;
import org.apache.wicket.protocol.http.servlet.ServletWebRequest;
import org.apache.wicket.request.http.WebRequest;
import org.apache.wicket.request.http.WebResponse;
import org.wicketstuff.rest.contenthandling.IWebSerialDeserial;
public class FileUploadSerialDeserial implements IWebSerialDeserial {
DiskFileItemFactory factory = new DiskFileItemFactory();
FileUploadSerialDeserial() {
ServletContext context = WebApplication.get().getServletContext();
File repository = (File) context.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);
}
@Override
public void objectToResponse(Object str, WebResponse response, String mimeType) throws WicketRuntimeException {
ServletResponse sResponse = (ServletResponse) response.getContainerResponse();
sResponse.setCharacterEncoding("UTF-8");
response.write((CharSequence) str);
}
@Override
@SuppressWarnings("unchecked")
public <T> T requestToObject(
WebRequest wRequest,
Class<T> argClass,
String mimeType) throws WicketRuntimeException {
try {
ServletWebRequest sRequest = (ServletWebRequest) wRequest;
HttpServletRequest request = sRequest.getContainerRequest();
ServletFileUpload fileUpload = new ServletFileUpload(factory);
List<FileItem> items = fileUpload.parseRequest(request);
return !items.isEmpty() ? (T) items.get(0) : null;
} catch (FileUploadException e) {
throw new WicketRuntimeException(e);
}
}
@Override
public boolean isMimeTypeSupported(String mimeType) {
return true;
}
}
So konnte ich die Datei sicher über JavaScript abrufen. Es ist ein grober Artikel, aber bitte verzeihen Sie mir, dass ich mir eine Notiz gemacht habe.
Recommended Posts