Use a temporary file when reading on-chain data.

This commit is contained in:
CalDescent 2023-04-21 13:59:29 +01:00
parent f045e10ada
commit 32b9b7e578
4 changed files with 19 additions and 6 deletions

View File

@ -79,7 +79,7 @@ public class ArbitraryDataFile {
this.signature = signature; this.signature = signature;
} }
public ArbitraryDataFile(byte[] fileContent, byte[] signature) throws DataException { public ArbitraryDataFile(byte[] fileContent, byte[] signature, boolean useTemporaryFile) throws DataException {
if (fileContent == null) { if (fileContent == null) {
LOGGER.error("fileContent is null"); LOGGER.error("fileContent is null");
return; return;
@ -90,7 +90,20 @@ public class ArbitraryDataFile {
this.signature = signature; this.signature = signature;
LOGGER.trace(String.format("File digest: %s, size: %d bytes", this.hash58, fileContent.length)); LOGGER.trace(String.format("File digest: %s, size: %d bytes", this.hash58, fileContent.length));
Path outputFilePath = getOutputFilePath(this.hash58, signature, true); Path outputFilePath;
if (useTemporaryFile) {
try {
outputFilePath = Files.createTempFile("qortalRawData", null);
outputFilePath.toFile().deleteOnExit();
}
catch (IOException e) {
throw new DataException(String.format("Unable to write data with hash %s to temporary file: %s", this.hash58, e.getMessage()));
}
}
else {
outputFilePath = getOutputFilePath(this.hash58, signature, true);
}
File outputFile = outputFilePath.toFile(); File outputFile = outputFilePath.toFile();
try (FileOutputStream outputStream = new FileOutputStream(outputFile)) { try (FileOutputStream outputStream = new FileOutputStream(outputFile)) {
outputStream.write(fileContent); outputStream.write(fileContent);
@ -116,7 +129,7 @@ public class ArbitraryDataFile {
if (data == null) { if (data == null) {
return null; return null;
} }
return new ArbitraryDataFile(data, signature); return new ArbitraryDataFile(data, signature, true);
} }
public static ArbitraryDataFile fromTransactionData(ArbitraryTransactionData transactionData) throws DataException { public static ArbitraryDataFile fromTransactionData(ArbitraryTransactionData transactionData) throws DataException {

View File

@ -18,7 +18,7 @@ public class ArbitraryDataFileChunk extends ArbitraryDataFile {
} }
public ArbitraryDataFileChunk(byte[] fileContent, byte[] signature) throws DataException { public ArbitraryDataFileChunk(byte[] fileContent, byte[] signature) throws DataException {
super(fileContent, signature); super(fileContent, signature, false);
} }
public static ArbitraryDataFileChunk fromHash58(String hash58, byte[] signature) throws DataException { public static ArbitraryDataFileChunk fromHash58(String hash58, byte[] signature) throws DataException {

View File

@ -68,7 +68,7 @@ public class ArbitraryDataFileMessage extends Message {
byteBuffer.get(data); byteBuffer.get(data);
try { try {
ArbitraryDataFile arbitraryDataFile = new ArbitraryDataFile(data, signature); ArbitraryDataFile arbitraryDataFile = new ArbitraryDataFile(data, signature, false);
return new ArbitraryDataFileMessage(id, signature, arbitraryDataFile); return new ArbitraryDataFileMessage(id, signature, arbitraryDataFile);
} catch (DataException e) { } catch (DataException e) {
LOGGER.info("Unable to process received file: {}", e.getMessage()); LOGGER.info("Unable to process received file: {}", e.getMessage());

View File

@ -64,7 +64,7 @@ public class ArbitraryMetadataMessage extends Message {
byteBuffer.get(data); byteBuffer.get(data);
try { try {
ArbitraryDataFile arbitraryMetadataFile = new ArbitraryDataFile(data, signature); ArbitraryDataFile arbitraryMetadataFile = new ArbitraryDataFile(data, signature, false);
return new ArbitraryMetadataMessage(id, signature, arbitraryMetadataFile); return new ArbitraryMetadataMessage(id, signature, arbitraryMetadataFile);
} catch (DataException e) { } catch (DataException e) {
throw new MessageException("Unable to process arbitrary metadata message: " + e.getMessage(), e); throw new MessageException("Unable to process arbitrary metadata message: " + e.getMessage(), e);