Permission denied when exporting to excel

Hi,

CSV and JSON export works fine.

I’m Running Metabase on Debian as a service with nginx as described here: https://www.metabase.com/docs/latest/operations-guide/running-metabase-on-debian.html

When i try to export something to excel i get this error message inside the excel:
{“via”:[{“type”:“java.lang.RuntimeException”,“message”:“java.io.IOException: Permission denied”,“at”:[“org.apache.poi.xssf.streaming.SXSSFWorkbook”,“createAndRegisterSXSSFSheet”,“SXSSFWorkbook.java”,662]},{“type”:“java.io.IOException”,“message”:“Permission denied”,“at”:[“java.io.UnixFileSystem”,“createFileExclusively”,“UnixFileSystem.java”,-2]}],“trace”:[[“java.io.UnixFileSystem”,“createFileExclusively”,“UnixFileSystem.java”,-2],[“java.io.File”,“createTempFile”,“File.java”,2092],[“org.apache.poi.util.DefaultTempFileCreationStrategy”,“createTempFile”,“DefaultTempFileCreationStrategy.java”,110],[“org.apache.poi.util.TempFile”,“createTempFile”,“TempFile.java”,66],[“org.apache.poi.xssf.streaming.SheetDataWriter”,“createTempFile”,“SheetDataWriter.java”,87],[“org.apache.poi.xssf.streaming.SheetDataWriter”,"",“SheetDataWriter.java”,70],[“org.apache.poi.xssf.streaming.SheetDataWriter”,"",“SheetDataWriter.java”,75],[“org.apache.poi.xssf.streaming.SXSSFWorkbook”,“createSheetDataWriter”,“SXSSFWorkbook.java”,330],[“org.apache.poi.xssf.streaming.SXSSFSheet”,"",“SXSSFSheet.java”,80],[“org.apache.poi.xssf.streaming.SXSSFWorkbook”,“createAndRegisterSXSSFSheet”,“SXSSFWorkbook.java”,658],[“org.apache.poi.xssf.streaming.SXSSFWorkbook”,“createSheet”,“SXSSFWorkbook.java”,679],[“org.apache.poi.xssf.streaming.SXSSFWorkbook”,“createSheet”,“SXSSFWorkbook.java”,90],[“dk.ative.docjure.spreadsheet$add_sheet_BANG_”,“invokeStatic”,“spreadsheet.clj”,283],[“dk.ative.docjure.spreadsheet$add_sheet_BANG_”,“invoke”,“spreadsheet.clj”,279],[“metabase.query_processor.streaming.xlsx$fn__54276”,“invokeStatic”,“xlsx.clj”,108],[“metabase.query_processor.streaming.xlsx$fn__54276”,“invoke”,“xlsx.clj”,104],[“clojure.lang.MultiFn”,“invoke”,“MultiFn.java”,234],[“metabase.query_processor.streaming$streaming_context”,“invokeStatic”,“streaming.clj”,52],[“metabase.query_processor.streaming$streaming_context”,“invoke”,“streaming.clj”,45],[“metabase.query_processor.streaming$streaming_context”,“invokeStatic”,“streaming.clj”,57],[“metabase.query_processor.streaming$streaming_context”,“invoke”,“streaming.clj”,45],[“metabase.query_processor.streaming$streaming_response_STAR_$fn__54340$fn__54341”,“invoke”,“streaming.clj”,72],[“metabase.query_processor.streaming$streaming_response_STAR_$fn__54340”,“invoke”,“streaming.clj”,71],[“metabase.async.streaming_response$do_f_STAR_”,“invokeStatic”,“streaming_response.clj”,65],[“metabase.async.streaming_response$do_f_STAR_”,“invoke”,“streaming_response.clj”,63],[“metabase.async.streaming_response$do_f_async$fn__16055”,“invoke”,“streaming_response.clj”,84],[“clojure.lang.AFn”,“applyToHelper”,“AFn.java”,152],[“clojure.lang.AFn”,“applyTo”,“AFn.java”,144],[“clojure.core$apply”,“invokeStatic”,“core.clj”,665],[“clojure.core$with_bindings_STAR_”,“invokeStatic”,“core.clj”,1973],[“clojure.core$with_bindings_STAR_”,“doInvoke”,“core.clj”,1973],[“clojure.lang.RestFn”,“invoke”,“RestFn.java”,425],[“clojure.lang.AFn”,“applyToHelper”,“AFn.java”,156],[“clojure.lang.RestFn”,“applyTo”,“RestFn.java”,132],[“clojure.core$apply”,“invokeStatic”,“core.clj”,669],[“clojure.core$bound_fn_STAR_$fn__5749”,“doInvoke”,“core.clj”,2003],[“clojure.lang.RestFn”,“invoke”,“RestFn.java”,397],[“clojure.lang.AFn”,“run”,“AFn.java”,22],[“java.util.concurrent.Executors$RunnableAdapter”,“call”,“Executors.java”,515],[“java.util.concurrent.FutureTask”,“run”,“FutureTask.java”,264],[“java.util.concurrent.ThreadPoolExecutor”,“runWorker”,“ThreadPoolExecutor.java”,1128],[“java.util.concurrent.ThreadPoolExecutor$Worker”,“run”,“ThreadPoolExecutor.java”,628],[“java.lang.Thread”,“run”,“Thread.java”,834]],“cause”:“Permission denied”,"_status":500}

This is my Diagnistic info:
{
“browser-info”: {
“language”: “en-US”,
“platform”: “Win32”,
“userAgent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36”,
“vendor”: “Google Inc.”
},
“system-info”: {
“file.encoding”: “UTF-8”,
“java.runtime.name”: “OpenJDK Runtime Environment”,
“java.runtime.version”: “11.0.10+9”,
“java.vendor”: “AdoptOpenJDK”,
“java.vendor.url”: “https://adoptopenjdk.net/”,
“java.version”: “11.0.10”,
“java.vm.name”: “OpenJDK 64-Bit Server VM”,
“java.vm.version”: “11.0.10+9”,
“os.name”: “Linux”,
“os.version”: “5.4.0-1037-aws”,
“user.language”: “en”,
“user.timezone”: “Etc/UTC”
},
“metabase-info”: {
“databases”: [
“h2”,
“mysql”
],
“hosting-env”: “unknown”,
“application-database”: “mysql”,
“application-database-details”: {
“database”: {
“name”: “MySQL”,
“version”: “8.0.20”
},
“jdbc-driver”: {
“name”: “MariaDB Connector/J”,
“version”: “2.6.2”
}
},
“run-mode”: “prod”,
“version”: {
“date”: “2021-03-03”,
“tag”: “v0.38.1”,
“branch”: “release-x.38.x”,
“hash”: “79ef63a”
},
“settings”: {
“report-timezone”: “Europe/Oslo”
}
}
}

Hi @atg
Are you running in Docker (official or custom) or JAR?
The error indicates that the user (which runs the JAR, also inside of container) doesn’t permissions to the temp directory (usually /tmp)

1 Like

Thanks for pointing me in the right direction!
I’m running the JAR file on an Ubuntu server. Had to do ‘sudo chgrp metabase /tmp/poifiles/’
After that it works again. Probably because I did run the the JAR file under ubuntu user before setting up metabase as service.

Have a nice day!