私はこの問題について頭を悩ませている日々であり、おそらくあなたは私よりも多くのことを知っていて、私を助けることができます....そして、私はよりよく説明しようとします.
ライブラリd3.jsを介してhtmlコードページを構築し、それを別のコードの各部分に別の機能で置き換えるjavascriptファイルがあります...ページは課金されません(Ajax)。ある時点で、ユーザーが自分のプロフィール写真に画像をアップロードできるようにする必要があるため、html コードの餌が確実に
<input type="file" id="file">
そして
<input type = "button" onclick = "javaScript: performAjaxSubmit ()">
PerformAjaxSubmit 関数 () は、xmlHttpRequest レベル 2 を介して Java サーブレットにデータを送信します。これは、私が理解していることから、文字列だけでなく、ファイルなどのより複雑なものも送信できます。
機能は次のとおりです。
function performAjaxSubmit() {
var sampleFile = document.getElementById("file").files[0];
var formdata = new FormData();
formdata.append("sampleFile", sampleFile);
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1:8080/Prova/Upload", true);
xhr.send(formdata);
xhr.onload = function(e) {
if (this.status == 200) {
alert(this.responseText);
}
};
}
代わりに、サーブレットのコードは次のとおりです。
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// Check that we have a file upload request
System.out.println(request.getAttribute("username"));
isMultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriter out = response.getWriter( );
DiskFileItemFactory factory = new DiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(new File("C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti"));
filePath="C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti";
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload(factory);
// maximum file size to be uploaded.
upload.setSizeMax( maxFileSize );
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
// Process the uploaded file items
Iterator i = fileItems.iterator();
while ( i.hasNext () )
{
FileItem fi = (FileItem)i.next();
if ( !fi.isFormField () )
{
// Get the uploaded file parameters
String fieldName = fi.getFieldName();
String fileName = fi.getName();
String contentType = fi.getContentType();
boolean isInMemory = fi.isInMemory();
long sizeInBytes = fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\") >= 0 ){
file = new File( filePath +"/"+
fileName.substring( fileName.lastIndexOf("\\"))) ;
}else{
System.out.println(filePath +
fileName.substring(fileName.lastIndexOf("\\")+1));
file = new File( filePath +"/"+
fileName.substring(fileName.lastIndexOf("\\")+1)) ;
}
fi.write( file ) ;
}
}
}catch(Exception ex) {
System.out.println(ex);
}
}
今(質問が少し長い場合は申し訳ありません)動作しますが、問題は、コマンドで提供したパスに画像が保存されることです:
factory.setRepository(new File("C:/Users/Marty/workspaceJEE/Prova/WebContent/imm/utenti"));
次に、リモートで保存するにはどうすればよいですか? つまり、そのような Altrevista のサイトをロードしたら、それらが C に保存されているのではなく、プロジェクト内のフォルダーに保存されていることを確認するにはどうすればよいですか?
説明したことを願っています。Apache Tomcat v7.0 を使用しています。前もって感謝します!