我有一个方法可以将文件添加到Azure Blob存储,问题是我正在尝试指定一个条件,它不会覆盖blob而只是添加它。我试图使用参数访问条件但是VS说这个方法不能带两个参数 - async void archiveNewImportedImages(List imageFiles) {
import javafx.application.Application;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
GridPane grid = new GridPane();
grid.setGridLinesVisible(true);
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
grid.add(new Button("foo"),i,j);
// Button myBtn = new Button("foo");
// GridPane.setColumnIndex(myBtn, i);
// GridPane.setRowIndex(myBtn, j);
// grid.getChildren().add(myBtn);
}
}
Scene scene = new Scene(grid);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
String[] colors = {"-fx-background-color: red;", "-fx-background-color: blue;", "-fx-background-color: white;"};
for (int i = 0; i < 20; i++) {
for (int j = 0; j < 20; j++) {
Node node = getNodeFromGridPane(grid,i,j);
if(node instanceof Button)
node.setStyle(colors[(int) (Math.random() * 3)]);
}
}
}
private Node getNodeFromGridPane(GridPane gridPane, int col, int row) {
for (Node node : gridPane.getChildren())
if (GridPane.getColumnIndex(node) != null
&& GridPane.getColumnIndex(node) != null
&& GridPane.getRowIndex(node) == row
&& GridPane.getColumnIndex(node) == col)
return node;
return null;
}
public static void main(String[] args) { launch(args); }
}
有什么建议吗?
结束目标:不要覆盖容器 - 继续添加不同的文件ex。 img1.jpg,img2.jpg到blob
其他详细信息:想要将图像附加到容器中(换句话说,继续将图像添加到容器中)。如果文件存在,则不想覆盖现有文件)
答案 0 :(得分:1)
按照设计,如果您尝试上传具有相同blob名称的新内容,Azure Blob存储将覆盖blob的内容。
如果您不想覆盖内容,可以执行某些操作,但之后您必须为其编写代码。
blob.ExistsAsync
来检查blob的存在,或者使用您当前正在执行的访问条件来执行操作。在第一种情况下,您将获得一个真/假值,并根据您决定要做什么。在第二种情况下,上传操作将失败并显示PreConditionNotMet (412 Status Code)
,因此您需要捕获异常并决定您要执行的操作。blob snapshot
功能。拍摄blob的快照时,它会创建blob的只读副本。但请记住,在这种情况下,只有一个blob和许多快照。每个快照由快照的日期/时间唯一标识。您可以获取blob及其快照,以查看对该Blob所做更改的历史记录。 答案 1 :(得分:0)
现在有一个CloudAppendBlob
类,允许您向现有blob添加内容:
var account = CloudStorageAccount.Parse("storage account connectionstring");
var client = account.CreateCloudBlobClient();
var container = client.GetContainerReference("container name");
var blob = container.GetAppendBlobReference("blob name");
在您的情况下,您想要从文件追加:
await blob.AppendFromFileAsync("file path");
但是你可以从文本,字节数组,流中追加。查看文档。