Accesso al file negato senza path assoluto

di il
4 risposte

Accesso al file negato senza path assoluto

Buongiorno a tutti, stavo sistemando questo problema sul service che deve stampare la listamoto sul file excel e poi scaricarlo tramite il metodo richiamato dall'endpoint /exportMotoToExcel. Se non inserisco il path assoluto del file mi da questo errore : java.io.FileNotFoundException: WriteMotoToExcel.xls (Accesso negato)

In sostanza questo metodo funziona solamente se gli passo un path assoluto e non funziona con un path relativo del tipo WriteToExcelFile.writeMotoListToFile("WriteMotoToExcel.xls", listaMoto);

@GET
	@Path("/exportMotoToExcel")
	@Produces(MediaType.APPLICATION_OCTET_STREAM)
	public Response exportToExcel(@QueryParam("model") String model, @QueryParam("ccFrom") Integer ccFrom,
			@QueryParam("ccTo") Integer ccTo, @QueryParam("yearProdFrom") String yearProdFrom,
			@QueryParam("yearProdTo") String yearProdTo, @QueryParam("priceFrom") Integer priceFrom,
			@QueryParam("priceTo") Integer priceTo, @QueryParam("orderBy") @DefaultValue("anno") String orderBy,
			@QueryParam("orderHow") @DefaultValue("desc") String orderHow, @QueryParam("offset") Integer offset,
			@QueryParam("limit") Integer limit) {

		SqlSessionFactory sessionFactory = SqlSessionFactoryManager.getSqlSessionFactory();
		SqlSession session = sessionFactory.openSession();

		List<Moto> listaMoto = null;
		RowBounds rowBounds = createRowBounds(offset, limit);

		MotoExample mb = new MotoExample();
		MotoExample.Criteria criteria = createCriteria(mb, model, ccFrom, ccTo, yearProdFrom, yearProdTo, priceFrom,
				priceTo);

		if (orderBy != null && orderHow != null) {
			mb.setOrderByClause(orderBy + " " + orderHow + ", modello " + "asc");
		}

		try {
			MotoMapper motoMapper = session.getMapper(MotoMapper.class);
			listaMoto = motoMapper.selectByExampleWithRowbounds(mb, rowBounds);

			// OCCHIO A PASSARE TUTTO IL FILE PATH ALTRIMENTI NON FUNZIONA!!!!
			WriteToExcelFile.writeMotoListToFile(
					"C:\\Users\\ricca\\eclipse-workspace\\RestApiMyBatis\\WriteMotoToExcel.xls", listaMoto);

			File file = new File("C:\\Users\\ricca\\eclipse-workspace\\RestApiMyBatis\\WriteMotoToExcel.xls");

			ResponseBuilder response = Response.ok((Object) file);
			response.header("Content-Disposition", "attachment; filename=WriteMotoToExcel.xls");
			return response.build();

		} catch (Exception e) {
			logger.error(e.getMessage(), e);
			return Response.status(Response.Status.INTERNAL_SERVER_ERROR).entity("internal server error").build();
		} finally {
			session.close();
		}

	}

4 Risposte

  • Re: Accesso al file negato senza path assoluto

    E a me questo sembra più che legittimo.

    Se non specifichi un path assoluto, allora il file si intende relativo alla directory corrente per il server.

    E non è detto (anzi, quasi mai è così) che tu abbia diritti di scrittura nella directory “corrente” per il server (ovvero, la directory da cui viene avviata l'applicazione server). Specialmente se il server viene avviato tramite un servizo.

    Se sei curioso di sapere qual è la directory corrente per il server, aggiungi queste righe e verifica cosa viene stampato nel log di output:

    File f = new File("pippo.txt");
    System.out.println( f.getAbsolutePath() );
  • Re: Accesso al file negato senza path assoluto

    07/11/2023 - SpiritoLibero ha scritto:


    E a me questo sembra più che legittimo.

    Se non specifichi un path assoluto, allora il file si intende relativo alla directory corrente per il server.

    E non è detto (anzi, quasi mai è così) che tu abbia diritti di scrittura nella directory “corrente” per il server (ovvero, la directory da cui viene avviata l'applicazione server). Specialmente se il server viene avviato tramite un servizo.

    Se sei curioso di sapere qual è la directory corrente per il server, aggiungi queste righe e verifica cosa viene stampato nel log di output:

    File f = new File("pippo.txt");
    System.out.println( f.getAbsolutePath() );

    Ma essendo un servizio rest, e quindi richiamabile da un qualsiasi dispositivo che si collega a questo endpoint, io non avro' piu' l'absolute path iniziale nel pc dell' utente che usa tale servizio.. credo

  • Re: Accesso al file negato senza path assoluto

    Stai facendo confusione: cosa c'entra il percorso del client? Su quello il servizio non ha nessun tipo di accesso (e ci mancherebbe!) Il servizio REST dove gira? Su un server. E da quale percorso è stato avviato sul server? Boh. A te non interessa, ti basti sapere che lì non ci scrivi.

    Il percorso assoluto che stai passando, è NEL SERVER, non nel client.

    Quello che fa la tua applicazione è creare un file SUL SERVER (nel percorso assoluto che tu hai specificato) e poi INVIARLO al client (che se lo salverà dove meglio crede)

  • Re: Accesso al file negato senza path assoluto

    07/11/2023 - SpiritoLibero ha scritto:


    Stai facendo confusione: cosa c'entra il percorso del client? Su quello il servizio non ha nessun tipo di accesso (e ci mancherebbe!) Il servizio REST dove gira? Su un server. E da quale percorso è stato avviato sul server? Boh. A te non interessa, ti basti sapere che lì non ci scrivi.

    Il percorso assoluto che stai passando, è NEL SERVER, non nel client.

    Quello che fa la tua applicazione è creare un file SUL SERVER (nel percorso assoluto che tu hai specificato) e poi INVIARLO al client (che se lo salverà dove meglio crede)

    Cavoli hai ragione, scusa la confusione… ora mi e' chiaro, grazie mille davvero!!

Devi accedere o registrarti per scrivere nel forum
4 risposte