diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md index 9097f2a..247bba1 100644 --- a/ISSUE_TEMPLATE.md +++ b/ISSUE_TEMPLATE.md @@ -1,11 +1,5 @@ -### Which service(blob, file, queue, table) does this issue concern? +This project has been moved to the [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository. -### Which version of the SDK was used? +This repository is no longer maintained. -### What's the Node.js/Browser version? - -### What problem was encountered? - -### Steps to reproduce the issue? - -### Have you found a mitigation/solution? +For new issues and pull requests, please go to [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository. \ No newline at end of file diff --git a/README.md b/README.md index b1e6709..cc4fb5d 100644 --- a/README.md +++ b/README.md @@ -1,306 +1,7 @@ # Azure Storage SDK V10 for JavaScript -* @azure/storage-blob [![npm version](https://badge.fury.io/js/%40azure%2Fstorage-blob.svg)](https://badge.fury.io/js/%40azure%2Fstorage-blob) -* @azure/storage-file [![npm version](https://badge.fury.io/js/%40azure%2Fstorage-file.svg)](https://badge.fury.io/js/%40azure%2Fstorage-file) -* @azure/storage-queue [![npm version](https://badge.fury.io/js/%40azure%2Fstorage-queue.svg)](https://badge.fury.io/js/%40azure%2Fstorage-queue) -* [API Reference documentation](https://docs.microsoft.com/en-us/javascript/api/overview/azure/storage/client?view=azure-node-preview) +This project has been moved to the [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository, specifically under https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/storage. -## Introduction +This repository is no longer maintained. -This project provides a SDK in JavaScript that makes it easy to consume Microsoft Azure Storage services. - -Please note that this version of the SDK is a compete overhaul of the current [Azure Storage SDK for Node.js and JavaScript in Browsers](https://github.com/azure/azure-storage-node), and is based on the new Storage SDK architecture. - -### Features - -* Blob Storage - * Get/Set Blob Service Properties - * Create/List/Delete Containers - * Create/Read/List/Update/Delete Block Blobs - * Create/Read/List/Update/Delete Page Blobs - * Create/Read/List/Update/Delete Append Blobs -* File Storage - * Get/Set File Service Properties - * Create/List/Delete File Shares - * Create/List/Delete File Directories - * Create/Read/List/Update/Delete Files -* Queue Storage - * Get/Set Queue Service Properties - * Create/List/Delete Queues - * Enqueue/Dequeue/Peek/Clear/Update/Delete Queue Messages -* Features new - * Asynchronous I/O for all operations using the async methods - * HttpPipeline which enables a high degree of per-request configurability - * 1-to-1 correlation with the Storage REST API for clarity and simplicity - -### Compatibility - -This SDK is compatible with Node.js and browsers, and validated against LTS Node.js versions (>=6.5) and latest versions of Chrome, Firefox and Edge. - -#### Compatible with IE11 - -You need polyfills to make this library work with IE11. The easiest way is to use [@babel/polyfill](https://babeljs.io/docs/en/babel-polyfill), or [polyfill service](https://polyfill.io/v2/docs/). -Or you can load separate polyfills for missed ES feature(s). -This library depends on following ES features which need external polyfills loaded. - -* `Promise` -* `String.prototype.startsWith` -* `String.prototype.endsWith` -* `String.prototype.repeat` -* `String.prototype.includes` -* `Array.prototype.includes` -* `Object.keys` (Override IE11's `Object.keys` with ES6 polyfill forcely to enable [ES6 behavior](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys#Notes)) - - -#### Differences between Node.js and browsers - -There are differences between Node.js and browsers runtime. When getting start with this SDK, pay attention to APIs or classes marked with _"ONLY AVAILABLE IN NODE.JS RUNTIME"_ or _"ONLY AVAILABLE IN BROWSERS"_. - -##### Following features, interfaces, classes or functions are only available in Node.js - -* Shared Key Authorization based on account name and account key - * `SharedKeyCredential` -* Shared Access Signature(SAS) generation - * `generateAccountSASQueryParameters()` - * `generateBlobSASQueryParameters()` - * `generateFileSASQueryParameters()` - * `generateQueueSASQueryParameters()` -* Parallel uploading and downloading - * `uploadFileToBlockBlob()` - * `uploadStreamToBlockBlob()` - * `downloadBlobToBuffer()` - * `uploadFileToAzureFile()` - * `uploadStreamToAzureFile()` - * `downloadAzureFileToBuffer()` - -##### Following features, interfaces, classes or functions are only available in browsers - -* Parallel uploading and downloading - * `uploadBrowserDataToBlockBlob()` - * `uploadBrowserDataToAzureFile()` - -## Getting Started - -### NPM - -The preferred way to install the Azure Storage SDK for JavaScript is to use the npm package manager. Take "@azure/storage-blob" for example. - -Simply type the following into a terminal window: - -```bash -npm install @azure/storage-blob -``` - -In your TypeScript or JavaScript file, import via following: - -```JavaScript -import * as Azure from "@azure/storage-blob"; -``` - -Or - -```JavaScript -const Azure = require("@azure/storage-blob"); -``` - -### JavaScript Bundle - -To use the SDK with JS bundle in the browsers, simply add a script tag to your HTML pages pointing to the downloaded JS bundle file(s): - -```html - - - -``` - -The JS bundled file is compatible with [UMD](https://github.com/umdjs/umd) standard, if no module system found, following global variable(s) will be exported: - -* `azblob` -* `azfile` -* `azqueue` - -#### Download - -Download latest released JS bundles from links in the [GitHub release page](https://github.com/Azure/azure-storage-js/releases). Or from following links directly: - -* Blob [https://aka.ms/downloadazurestoragejsblob](https://aka.ms/downloadazurestoragejsblob) -* File [https://aka.ms/downloadazurestoragejsfile](https://aka.ms/downloadazurestoragejsfile) -* Queue [https://aka.ms/downloadazurestoragejsqueue](https://aka.ms/downloadazurestoragejsqueue) - -### CORS - -You need to set up [Cross-Origin Resource Sharing (CORS)](https://docs.microsoft.com/zh-cn/rest/api/storageservices/cross-origin-resource-sharing--cors--support-for-the-azure-storage-services) rules for your storage account if you need to develop for browsers. Go to Azure portal and Azure Storage Explorer, find your storage account, create new CORS rules for blob/queue/file/table service(s). - -For example, you can create following CORS settings for debugging. But please customize the settings carefully according to your requirements in production environment. - -* Allowed origins: \* -* Allowed verbs: DELETE,GET,HEAD,MERGE,POST,OPTIONS,PUT -* Allowed headers: \* -* Exposed headers: \* -* Maximum age (seconds): 86400 - -## SDK Architecture - -The Azure Storage SDK for JavaScript provides low-level and high-level APIs. Take Blob SDK as example: - -* ServiceURL, ContainerURL and BlobURL objects provide the low-level API functionality and map one-to-one to the [Azure Storage Blob REST APIs](https://docs.microsoft.com/en-us/rest/api/storageservices/blob-service-rest-api). - -* The high-level APIs provide convenience abstractions such as uploading a large stream to a block blob (using multiple PutBlock requests). - -## Code Samples - -```javascript -const { - Aborter, - BlobURL, - BlockBlobURL, - ContainerURL, - ServiceURL, - StorageURL, - SharedKeyCredential, - AnonymousCredential, - TokenCredential -} = require("@azure/storage-blob"); - -async function main() { - // Enter your storage account name and shared key - const account = "account"; - const accountKey = "accountkey"; - - // Use SharedKeyCredential with storage account and account key - const sharedKeyCredential = new SharedKeyCredential(account, accountKey); - - // Use TokenCredential with OAuth token - const tokenCredential = new TokenCredential("token"); - tokenCredential.token = "renewedToken"; // Renew the token by updating token field of token credential - - // Use AnonymousCredential when url already includes a SAS signature - const anonymousCredential = new AnonymousCredential(); - - // Use sharedKeyCredential, tokenCredential or anonymousCredential to create a pipeline - const pipeline = StorageURL.newPipeline(sharedKeyCredential); - - // List containers - const serviceURL = new ServiceURL( - // When using AnonymousCredential, following url should include a valid SAS or support public access - `https://${account}.blob.core.windows.net`, - pipeline - ); - - let marker; - do { - const listContainersResponse = await serviceURL.listContainersSegment( - Aborter.none, - marker - ); - - marker = listContainersResponse.nextMarker; - for (const container of listContainersResponse.containerItems) { - console.log(`Container: ${container.name}`); - } - } while (marker); - - // Create a container - const containerName = `newcontainer${new Date().getTime()}`; - const containerURL = ContainerURL.fromServiceURL(serviceURL, containerName); - - const createContainerResponse = await containerURL.create(Aborter.none); - console.log( - `Create container ${containerName} successfully`, - createContainerResponse.requestId - ); - - // Create a blob - const content = "hello"; - const blobName = "newblob" + new Date().getTime(); - const blobURL = BlobURL.fromContainerURL(containerURL, blobName); - const blockBlobURL = BlockBlobURL.fromBlobURL(blobURL); - const uploadBlobResponse = await blockBlobURL.upload( - Aborter.none, - content, - content.length - ); - console.log( - `Upload block blob ${blobName} successfully`, - uploadBlobResponse.requestId - ); - - // List blobs - marker = undefined; - do { - const listBlobsResponse = await containerURL.listBlobFlatSegment( - Aborter.none, - marker - ); - - marker = listBlobsResponse.nextMarker; - for (const blob of listBlobsResponse.segment.blobItems) { - console.log(`Blob: ${blob.name}`); - } - } while (marker); - - // Get blob content from position 0 to the end - // In Node.js, get downloaded data by accessing downloadBlockBlobResponse.readableStreamBody - // In browsers, get downloaded data by accessing downloadBlockBlobResponse.blobBody - const downloadBlockBlobResponse = await blobURL.download(Aborter.none, 0); - console.log( - "Downloaded blob content", - await streamToString(downloadBlockBlobResponse.readableStreamBody) - ); - - // Delete container - await containerURL.delete(Aborter.none); - - console.log("deleted container"); -} - -// A helper method used to read a Node.js readable stream into string -async function streamToString(readableStream) { - return new Promise((resolve, reject) => { - const chunks = []; - readableStream.on("data", data => { - chunks.push(data.toString()); - }); - readableStream.on("end", () => { - resolve(chunks.join("")); - }); - readableStream.on("error", reject); - }); -} - -// An async method returns a Promise object, which is compatible with then().catch() coding style. -main() - .then(() => { - console.log("Successfully executed sample."); - }) - .catch(err => { - console.log(err.message); - }); -``` - -## More Samples - -* [Blob Storage Examples](https://github.com/azure/azure-storage-js/tree/master/blob/samples) -* [Blob Storage Examples - Test Cases](https://github.com/azure/azure-storage-js/tree/master/blob/tests/) -* [File Storage Examples](https://github.com/azure/azure-storage-js/tree/master/file/samples) -* [File Storage Examples - Test Cases](https://github.com/azure/azure-storage-js/tree/master/file/test/) -* [Queue Storage Examples](https://github.com/azure/azure-storage-js/tree/master/queue/samples) -* [Queue Storage Examples - Test Cases](https://github.com/azure/azure-storage-js/tree/master/queue/tests/) - -## License - -This project is licensed under MIT. - -## Contributing - -This project welcomes contributions and suggestions. Most contributions require you to agree to a -Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us -the rights to use your contribution. For details, visit - -When you submit a pull request, a CLA-bot will automatically determine whether you need to provide -a CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions -provided by the bot. You will only need to do this once across all repos using our CLA. - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). -For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or -contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. +For new issues and pull requests, please go to [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository. diff --git a/pull_request_template.md b/pull_request_template.md new file mode 100644 index 0000000..247bba1 --- /dev/null +++ b/pull_request_template.md @@ -0,0 +1,5 @@ +This project has been moved to the [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository. + +This repository is no longer maintained. + +For new issues and pull requests, please go to [azure-sdk-for-js](https://github.com/Azure/azure-sdk-for-js) repository. \ No newline at end of file