2014-11-03 2 views
0

Я новичок в Java EE, и я хотел бы, чтобы пользователь загружал файл XML своей файловой системой. Мое приложение использует API REST. Файл для загрузки успешно загружается на сервер (в локальном хосте), но я замечаю, что некоторые данные метаданных являются частью этого нового файла, поэтому он застревает там!Файл, загруженный через файловую систему с использованием API REST

Пример: Для того, чтобы загрузить файл «web.xml», вот что добавляется к заголовку и конец нового файла (на стороне сервера)

Header: 
------WebKitFormBoundarybi7qp5AIFEXbebt7 
Content-Disposition: form-data; name="datafile"; filename="web.xml" 
Content-Type: text/xml 

End of new file 
------WebKitFormBoundarybi7qp5AIFEXbebt7-- 

Смотрите ниже файл клиента и на стороне сервера кода HTML

Client.HTML 

</body> 
<form action="rest/file/upload" enctype="multipart/form-data" method="post"> 
    <p> 
     Entrer un fichier xml:<br> 
     <input type="file" name="datafile" size="40"> 
    </p> 
    <div> 
     <input type="submit" value="Send"> 
    </div> 
</form> 
</body> 

У нас есть это выше «Client.HTML» с помощью простого метода GET с сервера. При отправке формы метод POST ниже называется

UploadService.java 
@Path("/file") 
public class UploadService { 
@POST 
@Path("/upload") 
@Produces("text/html") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(@Context HttpServletRequest request) { 
    String uploadedFileLocation = "D:\\rest.xml"; 

    InputStream in; 
    try { 

     in = request.getInputStream(); 
     // save it 
     writeToFile(in, uploadedFileLocation); 

    } catch (IOException e) { 

    } 
    String output = "File uploaded to : " + uploadedFileLocation; 

    return Response.status(200).entity(output).build(); 

} 

// save uploaded file to new location 
    private void writeToFile(InputStream uploadedInputStream, 
     String uploadedFileLocation) { 

     try { 
      OutputStream out = new FileOutputStream(new File(uploadedFileLocation)); 
      int read = 0; 
      byte[] bytes = new byte[1024]; 

      while ((read = uploadedInputStream.read(bytes)) != -1) { 
       out.write(bytes, 0, read); 
      } 
      out.flush(); 
      out.close(); 
     } catch (IOException e) { 

      e.printStackTrace(); 
     } 

    } 

Любая помощь или рекомендации для его решения, пожалуйста?

ответ

0

же проблема я столкнулся для загрузки JSON

Ляпсуса Может быть, вы с помощью обычного метода записи файла в качестве выхода на свое место : это, сделав x.xml файл на месте и размещении содержимое напрямую.

Как вы отправляете файл a с расширением .xml с вашего многократного запроса , так что он должен быть получен и написан таким образом.

шагов вы должны сделать для получения ваших файлов элементов (Либо они являются параметрами файла или ввода)

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

    boolean isMultipartContent = ServletFileUpload.isMultipartContent(request); if (!isMultipartContent) { out.println("You are not trying to upload<br/>"); return; out.println("You are trying to upload<br/>");

Для справки можно просмотреть this, но его только для обычного файла, а не для XML. также uploading xml может вам помочь.

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