mirror of
https://github.com/Qortal/qortal.git
synced 2025-04-25 04:17:51 +00:00
Use a temporary file when reading on-chain data.
This commit is contained in:
parent
f045e10ada
commit
32b9b7e578
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
@ -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());
|
||||||
|
@ -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);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user