2013-05-16 7 views
0

Я должен отправить изображение с телефона Android на локальный веб-сервер на моем компьютере. Я хотел бы сохранить изображение в папку на локальном сервере. Мой план - написать какой-то контроллер, который позаботится о полученном снимке и сохранит его. Поэтому в основном я думаю, что мне нужно создать контроллер, который принимает параметр (изображение) и сохраняет его в папке на сервере. Я искал все и еще не нашел то, что искал.Сохранить полученное изображение в папку на веб-сервере

Поэтому я хотел бы знать:
Как такой контроллер написан.



настоящее время я использую Apache Tomcat/7.0.39 веб-сервер, Spring MVC Framework через STS и моя ОС Windows 7

Aprreciate любая помощь я могу получить!
Примеры кода были бы весьма признательны.

Спасибо,
Mat

+0

Я предполагаю, что изображение предпочтительно отправляется как строка Base64. Я слышал что-то о почтовых запросах, возможно, это будет полезно? – Mat

+0

В общем, то, что вы ищете, это «обработчик загрузки файлов». Попробуйте выполнить поиск, есть много простых вариантов для этого, если вам не нужно использовать Spring. –

ответ

0

Apache Commons FileUpload довольно прост в использовании для обработки многокомпонентных сообщений формы. Я не думаю, что использовал его с Spring MVC, но есть examples.

+0

Да, я только что обнаружил это и сумел вырвать контроллер, который выполняет эту работу. – Mat

+0

Также вы знаете, есть ли хороший способ отправить картинку с телефона Android на сервер, который использует файл общего доступа? '(В принципе, как писать код) – Mat

+0

Вы имеете в виду от веб-формы в браузере Android или прямо из файловой системы? Если это html-форма, вы просто указываете enctype = "mulipart/form-data" в теге формы и предоставляете вход с типом = "файл". Если это из файловой системы, вам не понадобится библиотека FileUpload в сервлете. Вы можете отправить данные в сообщение http (проверьте java.net.HttpURLConnection). Затем в сервлете вы просто читаете двоичный файл ServletInputStream и буферизируете данные в FileOutputStream. – Tap

0

Для подобной функции (загрузка фотографий с Android на сервлет), вот Android код клиента я использую (немного отредактирована для размещения здесь):

URI uri = URI.create(// path to file); 

MultipartEntity entity = new MultipartEntity(HttpMultipartMode.STRICT); 
// several key-value pairs to describe the data, one should be filename 
entity.addPart("key", new StringBody("value")); 

File inputFile = new File(photoUri.getPath()); 
// optionally reduces the size of the photo (you can replace with FileInputStream) 
InputStream photoInput = getSizedPhotoInputStream(photoUri); 
entity.addPart("CONTENT", new InputStreamBody(photoInput, inputFile.getName())); 

HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost(uri); 
HttpContext localContext = new BasicHttpContext(); 

httppost.setEntity(entity);  
HttpResponse response = httpclient.execute(httppost, localContext); 

и вот код, чтобы получить его. Во-первыхи, убедитесь, что помечать класс сервлета в качестве поддержки многокомпонентных сообщений:

@MultipartConfig 
public class PhotosServlet extends HttpServlet 

, а затем соответствующая часть тела:

HttpEntity entity = new InputStreamEntity(request.getPart("CONTENT").getInputStream(), contentLength); 
InputStream inputFile = entity.getContent(); 

// string extension comes from one of the key-value pairs 
String extension = request.getParameter(//filename key); 

// first write file to a file 
File images = new File(getServletContext().getRealPath("images")); 
File filePath = File.createTempFile("user", extension, images); 
writeInputDataToOutputFile(inputFile, filePath); // just copy input stream to output stream 
String path = filePath.getPath(); 

logger.debug("Wrote new file, filename: " + path); 

Надеется, что это помогает.

+0

Спасибо, я пошел на подобное решение! – Mat

0

Это решение, которое я пошел с помощью STS с MVC Framework шаблона:

Контроллер:

@Controller 
public class HomeController {@RequestMapping(value = "/upload", method = RequestMethod.POST) 
public String handleFormUpload(@RequestParam("name") String name, @RequestParam("file") MultipartFile file) throws IOException { 
if (!file.isEmpty()) { 
    byte[] bytes = file.getBytes(); 
    FileOutputStream fos = new FileOutputStream(
      "C:\\Users\\Mat\\Desktop\\image.bmp"); 
    try { 
     fos.write(bytes); 
    } finally { 
     fos.close(); 
    } 
    return "works"; 
} else { 
    return "doesn't work"; 
} 
} 

} 

.jsp файл (форма):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> 
<%@ page session="false" %> 
<html> 
<head> 
    <title>Upload a file please</title> 
</head> 
<body> 
    <h1>Please upload a file</h1> 
    <form method="post" action="/upload" enctype="multipart/form-data"> 
     <input type="file" name="file"/> 
     <input type="submit"/> 
    </form> 
</body> 

Смежные вопросы