如何为org.jvnet.mimepull设置临时目录?

问题描述 投票:0回答:1

我正在使用

org.jvnet.mimepull
来允许我的 Java 应用程序提供文件下载服务。一切都很完美,直到我尝试下载> 4GB 的大文件。然后,我得到了
java.io.IOException: No space left on device.
的错误 检查服务器,我可以看到
/tmp
文件系统(4GB 大小)完全充满了文件
MIME*.tmp
。据我了解,
org.jvnet.mimepull
在下载过程中使用临时目录作为临时目录。

问题是:如何配置

org.jvnet.mimepull
以使用自定义临时目录而不是
/tmp

完整的错误堆栈是:

Error handling a request: efd18e645be47f96
java.io.IOException: No space left on device
    at java.base/java.io.RandomAccessFile.writeBytes(Native Method)
    at java.base/java.io.RandomAccessFile.write(RandomAccessFile.java:559)
    at org.jvnet.mimepull.WeakDataFile.writeTo(WeakDataFile.java:122)
    at org.jvnet.mimepull.DataFile.writeTo(DataFile.java:95)
    at org.jvnet.mimepull.FileData.<init>(FileData.java:57)
    at org.jvnet.mimepull.FileData.createNext(FileData.java:91)
    at org.jvnet.mimepull.Chunk.createNext(Chunk.java:64)
    at org.jvnet.mimepull.DataHead.addBody(DataHead.java:87)
    at org.jvnet.mimepull.MIMEPart.addBody(MIMEPart.java:243)
    at org.jvnet.mimepull.MIMEMessage.makeProgress(MIMEMessage.java:270)
    at org.jvnet.mimepull.MIMEMessage.parseAll(MIMEMessage.java:189)
    at org.jvnet.mimepull.MIMEMessage.getAttachments(MIMEMessage.java:115)
    at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.getMimeParts(MultiPartReaderClientSide.java:272)
    at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readMultiPart(MultiPartReaderClientSide.java:231)
    at org.glassfish.jersey.media.multipart.internal.MultiPartReaderServerSide.readMultiPart(MultiPartReaderServerSide.java:91)
    at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:183)
    at org.glassfish.jersey.media.multipart.internal.MultiPartReaderClientSide.readFrom(MultiPartReaderClientSide.java:93)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:74)
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155)
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874)
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:808)
    at org.glassfish.jersey.server.ContainerRequest.readEntity(ContainerRequest.java:234)
    at org.glassfish.jersey.media.multipart.internal.FormDataParamValueFactoryProvider$ValueFactory.getEntity(FormDataParamValueFactoryProvider.java:126)
    at org.glassfish.jersey.media.multipart.internal.FormDataParamValueFactoryProvider$FormDataParamValueFactory.provide(FormDataParamValueFactoryProvider.java:280)
    at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71)
    at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:90)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127)
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160)
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
java temp
1个回答
0
投票

找到了。临时目录的位置由

java.io.tmpdir
系统属性控制。因此,只需添加 JVM 参数即可:

-Djava.io.tmpdir=/path/to/tmpdir
© www.soinside.com 2019 - 2024. All rights reserved.