Как получить абсолютный путь в Java

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

Код выглядит следующим образом:

String fromLocal = "D:/123.jpg";
 File file = new File(fromLocal);
 InputStream inputStream = null;
 byte[] bFile= null;
 byte[] imageData = null;
 try {
 inputStream = new BufferedInputStream(new FileInputStream(file));
 ByteArrayOutputStream baos = new ByteArrayOutputStream(8192);
 bFile = new byte[8192];
 int count;
 while((count = inputStream.read(bFile))> 0){
 baos.write(bFile, 0, count);
 }
 bFile = baos.toByteArray();
 if(bFile.length > 0){
 imageData = bFile;
 }
 baos.flush();
 inputStream.close();
 } catch (Exception ioe) {
 //throw ioe;
 }

Проблема в том, что когда я пытаюсь жестко кодировать путь изображения (например, здесь D: /123.jpg), он работает абсолютно нормально. Теперь он зависит от пользователя и зависит от клиента, он может загрузить изображение с любого диска и из любого каталога. У меня нет привилегии использования сервлета. Мой запрос:

1. Теперь, если я пытаюсь загрузить то же изображение из D: /123.jpg из браузера, я получаю только 123.jpg не абсолютный путь, как D: /123.jpg. Из-за того, что сейчас не удается обработать изображение.

2.Как знать, какой конкретный путь от того, где пользователь пытался загрузить изображение. (Скажем, пользователь загружает изображение с C: /images/123.jpg), поэтому, как получить этот абсолютный путь.

Я изо всех сил старался подробно рассказать о своей проблеме, дайте мне знать, если что-то неясно, я попытаюсь объяснить каким-то другим способом.

2 ответа

Если пользователь загружает файл в ваш сервлет, файл содержится в корпусе запроса, а не на любом пути на сервере. Путь на клиентском компьютере конечного пользователя не имеет значения (и вы не можете получить к нему доступ в любом случае, даже на стороне клиента).

Там загружается Java EE 6 tutoral на файл: http://docs.oracle.com/javaee/6/tutorial/doc/glraq.html

В основном (из этого примера), если поле, используемое для загрузки, имеет file, вы делаете это в своем сервлете:

final Part filePart = request.getPart("file");
InputStream filecontent = null;

а затем позже в try/catch:

filecontent = filePart.getInputStream();

... и использовать данные из потока.

Здесь источник из урока выше (в случае, если он недоступен, когда кто-то читает это позже). В этом случае он записывает файл на файловую серверную часть, но в вашем случае, конечно, вы заселяете свой imageData (который я беру его, а затем помещаем в БД).

@WebServlet(name = "FileUploadServlet", urlPatterns = {"/upload"})
@MultipartConfig
public class FileUploadServlet extends HttpServlet {

 private final static Logger LOGGER = 
 Logger.getLogger(FileUploadServlet.class.getCanonicalName());

 protected void processRequest(HttpServletRequest request,
 HttpServletResponse response)
 throws ServletException, IOException {
 response.setContentType("text/html;charset=UTF-8");

 // Create path components to save the file
 final String path = request.getParameter("destination");
 final Part filePart = request.getPart("file");
 final String fileName = getFileName(filePart);

 OutputStream out = null;
 InputStream filecontent = null;
 final PrintWriter writer = response.getWriter();

 try {
 out = new FileOutputStream(new File(path + File.separator
 + fileName));
 filecontent = filePart.getInputStream();

 int read = 0;
 final byte[] bytes = new byte[1024];

 while ((read = filecontent.read(bytes)) != -1) {
 out.write(bytes, 0, read);
 }
 writer.println("New file " + fileName + " created at " + path);
 LOGGER.log(Level.INFO, "File{0}being uploaded to {1}", 
 new Object[]{fileName, path});
 } catch (FileNotFoundException fne) {
 writer.println("You either did not specify a file to upload or are "
 + "trying to upload a file to a protected or nonexistent "
 + "location.");
 writer.println(" ERROR: " + fne.getMessage());

 LOGGER.log(Level.SEVERE, "Problems during file upload. Error: {0}", 
 new Object[]{fne.getMessage()});
 } finally {
 if (out != null) {
 out.close();
 }
 if (filecontent != null) {
 filecontent.close();
 }
 if (writer != null) {
 writer.close();
 }
 }
 }

 private String getFileName(final Part part) {
 final String partHeader = part.getHeader("content-disposition");
 LOGGER.log(Level.INFO, "Part Header = {0}", partHeader);
 for (String content : part.getHeader("content-disposition").split(";")) {
 if (content.trim().startsWith("filename")) {
 return content.substring(
 content.indexOf('=') + 1).trim().replace("\"", "");
 }
 }
 return null;
 }
}


Вы не можете получить абсолютный путь, если вы отправляете форму через браузер, из-за protocol(HTTP). Файл изображения будет прикреплен к объекту запроса (без какого-либо абсолютного пути). Это оно!!!

licensed under cc by-sa 3.0 with attribution.